Вопрос по оптимизации LINQ - PullRequest
4 голосов
/ 01 июня 2011

Если у меня есть следующий код, создает ли компилятор каждый результат или достаточно разумно просто посчитать, сколько соответствующих записей в таблице?В противном случае это может вынудить меня использовать другую стратегию для более крупных запросов.

from c in context.RendezVous
where c.RepID == repID &&
    c.DateHeureRV != null &&
    c.DateHeureRV.Value.Date == date.Date
select c).Count();

Спасибо!

Ответы [ 3 ]

4 голосов
/ 01 июня 2011

Зависит от типа context.

Если это Entity Framework или запрос Linq to SQL, а context равен IQueryable<T>, тогда запрос преобразуется в SQL-запрос на сервере , который просто возвращает счет в виде одного целое число.

Если это коллекция в памяти (то есть: IEnumerable<T>), каждый элемент повторяется последовательно (Linq to Objects) и подсчитывается.

Я подозреваю, что первое верно, поскольку вы упомянули «таблицу» и не используете методы расширения LINQ to Dataset. В этом случае вы останетесь очень эффективными.

2 голосов
/ 01 июня 2011

Это будет выполнено (более или менее):

select count(*)
from rendezvous
where repid='...' and dateheurerv is not null and dateheurerv='...'

Linq не добавит к запросу реальных издержек, и счет будет обработан на стороне сервера.

1 голос
/ 01 июня 2011

Это выполнит запрос SQL с тремя перечисленными вами условиями WHERE и вернет счетчик соответствующих строк, он только материализует фактическое количество , а не каждую строку - если это был ваш вопрос.

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