【问题标题】:LINQ Check If DateRange Contains Named Day or Check if DateRange Contains a Weekend [closed]LINQ 检查 DateRange 是否包含指定日期或检查 DateRange 是否包含周末 [关闭]
【发布时间】:2014-01-18 06:49:44
【问题描述】:

我正在尝试编写 LINQLINQPad4 查询以检查 DateRange 是否在周末结束。

有人有办法吗?

它可以检查DateRange 中的任何指定日期是否为“星期六”,如果这是一种更简单的方法。

如果无法为 DateRange 执行此操作,是否有任何方法可以检查特定 DateTime 的命名日期?

==编辑== 我正在尝试在 LINQ 查询表达式中执行所有这些操作以查询 SQL 数据库。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 是否适用于特定的 LINQ 框架,如 Entity Framework?
  • 嗨,不重复,因为我试图在 LINQ 中使用 C# 查询表达式而不是直接在 C# 中执行此操作
  • Joe,可以在 LINQ Pad 中编写 Linq to Objects 查询。你到底在用什么 Linq to SQL 或 Linq to Entities?
  • 这最终将与Entiry Framework 一起使用,但目前我使用LINQPad 作为代码暂存器,并希望将整个查询保留在LINQ 查询中。

标签: c# linq linq-to-sql


【解决方案1】:
Console.WriteLine(dateValue.ToString("ddd"));    // Displays Wed

简单的检查很容易:

var isInRange = dateToCheck >= startDate && dateToCheck < endDate;

作为@Sergey Berezovskiy answered here:

你也可以使用Martin Fowlers date range:

public interface IRange<T>
{
    T Start { get; }
    T End { get; }
    bool Includes(T value);
    bool Includes(IRange<T> range);
}

public class DateRange : IRange<DateTime>         
{
    public DateRange(DateTime start, DateTime end)
    {
        Start = start;
        End = end;
    }

    public DateTime Start { get; private set; }
    public DateTime End { get; private set; }

    public bool Includes(DateTime value)
    {
        return (Start <= value) && (value <= End);
    }

    public bool Includes(IRange<DateTime> range)
    {
        return (Start <= range.Start) && (range.End <= End);
    }
}

用法:

DateRange range = new DateRange(startDate, endDate);
range.Includes(date)

【讨论】:

  • 嗨,如果我在VS 中执行此操作会很容易,但我正在尝试将其写入LINQ 查询。您不能在 LINQ 查询中使用 .ToString。
  • @paqogomez 谢谢,+1 因此 OP 没有提到他正在查询数据库,这是一个很好的解决方案
  • @paqogomez 感谢您的建议,抱歉我不是更清楚,我虽然 LINQ 查询表达式是用于查询数据库。我已在问题中添加了详细信息以供进一步澄清。
【解决方案2】:

通过 Linq to SQL,您可以使用 DateTime 的属性。您可以引入新的范围变量来保存当前星期几,然后用它来检查日期是否在周末:

from f in Foos
let day = f.Date.DayOfWeek
where day == DayOfWeek.Saturday || day == DayOfWeek.Sunday
select f

【讨论】:

  • 谢谢,作为 Select 语句的一部分,有没有办法对 DateRange 进行检查?
  • @Joe_DM 是的,你可以通过fromDate和toDate,检查是否fromDate &gt;= f.Date &amp;&amp; f.Date &lt;= toDate
  • 请注意,在尝试此操作时,您似乎需要在 .Value 上应用 .DayOfWeek,例如让 day = so.DateReceived.Value.DayOfWeek
  • @Joe_DM 那是因为你有 Nullable&lt;DateTime&gt; 而不是简单的 DateTime 类型。抱歉,要走了,一小时后回来
  • 顺便说一句,这很好用,谢谢。我在DateRange 中找到第一天的名称,然后是天数,这让我有逻辑可以使用。
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多