Эквивалент SQL между выражением Использование Linq или лямбда-выражения - PullRequest
12 голосов
/ 03 ноября 2010

Не думайте, что это репост, который трудно найти между словом, потому что оно используется во всем (например, при поиске AND).

Я хочу отфильтровать список по диапазону дат.

У меня есть список с некоторыми датами, и я хочу отфильтровать их по диапазону дат.Существует ли Linq или Lambda-эквивалент оператора between в SQL.

Например, приведенный ниже код не будет работать в Linqpad (или Visual Studio):

void Main()
{
    List<ListExample> list = new List<ListExample>();

    list.Add(new ListExample("Name1","23 Aug 2010"));
    list.Add(new ListExample("Name2","23 Aug 2009"));

    var query = from l in list
        where l.DateValue between "01 Jan 2010" and "01 Jan 2011"
        select l;

}

public class ListExample
{

    public ListExample(string name, string dateValue)
    {
        Name = name;
        DateValue = DateTime.Parse(dateValue);
    }

    public string Name{get;set;}
    public DateTime DateValue{get;set;}
}

Ответы [ 3 ]

26 голосов
/ 03 ноября 2010

Как-то так?

var query = from l in list
            where l.DateValue >= new DateTime(2010, 1, 1) 
               && l.DateValue <= new DateTime(2011, 1, 1)
            select l;

Вы можете написать свой собственный метод расширения:

public static bool IsBetween(this DateTime dt, DateTime start, DateTime end)
{
   return dt >= start && dt <= end;    
}

В этом случае запрос будет выглядеть примерно так (синтаксис метода для изменения):

var start = new DateTime(2010, 1, 1);
var end = new DateTime(2011, 1, 1);
var query = list.Where(l => l.DateValue.IsBetween(start, end));

Я вижу, вы предоставили несколько образцов с датами в виде строк.Я бы определенно держал логику синтаксического анализа (DateTime.ParseExact или другую) отдельно от запроса, если это вообще возможно.

1 голос
/ 03 ноября 2010
Datetime DT1 = DateTime.Parse("01 Jan 2010");
Datetime DT2 = DateTime.Parse("01 Jan 2011");
var query = from l in list
            where l.DateValue >= DT1 && l.DateValue <= DT2
            select l;

в linq вы используете && и || как в обычном логическом выражении C #.

1 голос
/ 03 ноября 2010
var query = from l in list
        where new DateTime(1,1,2010) <= l.DateValue and DateValue <= new DateTime(1,1,2011)
        select l;

Конечно, обычно применяются предупреждения о часовых поясах и разном времени на клиентах и ​​серверах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...