2009-12-04 3 views
1

У меня стол был назван «MYTABLE». У этого есть две колонки «FIRSTNAME» и «LASTNAME». Два запроса ниже возвращенного же результата IQueryable<MYTABLE>В чем разница между двумя типами запросов в LINQ?

dataContext.MYTABLEs.Where(f => f.FIRSTNAME == firstName && f.LASTNAME == lastName); 

from t in dataContext.MYTABLEs 
where t.FIRSTNAME == firstName && t.LASTNAME == lastName select t; 

В чем разница? какой из двух запросов быстрее?

ответ

8

Они оба одинаковы. Вы можете писать запросы LINQ, используя синтаксис lambda (method) (1-й подход) или синтаксис запроса (второй подход). Последний - просто синтаксический сахар, и оба скомпилируются в одно и то же.

Из статьи LINQ Query Syntax versus Method Syntax MSDN:

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

Аналогичный вопрос можно найти here.

0

Все они одинаковы и должны скомпилироваться по одному и тому же кодам.

1

Это точно то же самое. Они оба скомпилируются в тот же MSIL. Один из них просто вызывает методы в IQuerable, а другой использует расширения, добавленные в C#, чтобы делать то же самое.

2

Эти компиляции идентичны IL. Последний является синтаксическим сахаром для первого (т. Е. Компилятор просто переводит синтаксис запроса в синтаксис метода до вывода IL).

Однако есть некоторые незначительные различия между ними. Есть несколько запросов, которые могут быть выражены только в синтаксисе метода (например, data.Count(somePredicate) или data.Max(somePredicate)).

Дополнительную информацию о синтаксисе запросов LINQ и синтаксисе метода см. В разделе MSDN.