LINQ检查DateRange是否包含命名日或检查DateRange是否包含周末

时间:2014-01-18 06:49:44

标签: c# linq linq-to-sql

我正在尝试撰写LINQLINQPad4查询,以检查DateRange是否会在周末失败。

有人有办法吗?

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

如果无法对DateRange执行此操作,是否有办法检查特定DateTime的指定日期?

== EDIT == 我试图在LINQ查询表达式中查询SQL数据库。

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:2)

使用Linq to SQL,您可以使用DateTime的属性。您可以引入新的范围变量,该变量将保留当前的星期几,然后使用它来检查是否在周末的某一天:

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