Производительность запросов сущностей LINQ - PullRequest
2 голосов
/ 13 мая 2010

У меня глупый вопрос. Я хотел бы знать, есть ли разница в производительности между этими двумя запросами:

var cObject = from cust in entities.Customer 
              where cust.id == cid
              select cust;

и

var cObject = entities.Customer.First( c=> c.id == cid);

Мой запрос возвращает только одну запись, поскольку я запрашиваю первичный ключ. Но они имеют какое-либо значение?

Ответы [ 4 ]

3 голосов
/ 13 мая 2010

Производительность мудрая, они должны быть похожими.

Напечатай, что они разные. Первый возвращает IEnumerable IQueryable объект с одним элементом. Второй фактически возвращает объект Customer.

1 голос
/ 13 мая 2010

Как отмечает Крейг Штунц в комментариях к вопросу, вы должны быть осторожны с профилированием кода Linq, поскольку отложенная загрузка отложенное выполнение может исказить ваши результаты профилирования.

Чтобы получить четкое представление, вам нужно будет позвонить ToList(), чтобы заставить запрос полностью выполнить, а затем вам придется сделать то же самое на втором примере, чтобы превратить его из яблок в яблоки.

В любом случае, если бы второй запрос был переписан так, чтобы он возвращал IEnumerable IQueryable с одним объектом клиента вместо одного объекта клиента, эти два оператора были бы функционально идентичны.

1 голос
/ 13 мая 2010

Если ваш поставщик LINQ поддерживает понятие «запрос с одной записью», то запрос, использующий First, вероятно, будет немного быстрее.

Обратите внимание, что вы можете использовать первый, а затем сделать cObject.First(), чтобы получить тот же эффект.

0 голосов
/ 13 мая 2010

Нет производительности.

Первое знакомство с Microsoft

var cObject = entities.Customer.First( c=> c.id == cid);

Редактировать: Возвращает IQueryable

Затем к нему добавили сахар, чтобы облегчить работу.

var cObject = from cust in entities.Customer 
          where cust.id == cid
      select cust;

Редактировать возврат customer object

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