2010-08-20 3 views
1

Я использую этот запрос LINQ в приложении, которое я пишу:Упрощение запроса LINQ?

internal int GetNoteCount(DateTime startDate, DateTime endDate) 
{ 
    var a = DataStore.ObjectContext.Notes.Where(n => n.LastRevised >= startDate); 
    var b = a.Where(n => n.LastRevised <= endDate); 
    return b.Count(); 
} 

Очевидно, что запрос получает Notes, попадающий между двумя датами. Я хотел бы упростить запрос, объединив первые две строки в один. Я знаю, что могу использовать свободный синтаксис, чтобы добавить вызов метода Count() в конец моего запроса.

Вот мой вопрос: как я могу объединить два запроса? По-видимому, оператор & & не работает с двумя лямбда-выражениями. Спасибо за вашу помощь.

ответ

3

Вы можете сделать это:

internal int GetNoteCount(DateTime startDate, DateTime endDate) 
{ 
    return DataStore.ObjectContext.Notes.Where(n => n.LastRevised >= startDate && n.LastRevised <= endDate).Count(); 
} 

Просто используйте && на ваших условиях, а не весь лямбда :)

+0

Не забывайте, что он возвращает .Count(). –

+0

@Jacob - woops, спасибо и добавил :) –

+0

Спасибо! Принято и +1 –

1

Во-первых, нет ничего плохого с оператором & & и он должен работать нормально ,

var a = DataStore.ObjectContext.Notes.Where(n => n.LastRevised >= startDate && n.LastRevised <= endDate); 
return a.Count(); 

Во-вторых, с помощью LINQ, это не задерживает выполнение запроса до .Count(), так что нет никакой функциональной разницы между вашим примером и этот.