Нет, они не одинаковы.
Запросы LINQ to Objects работают с коллекциями IEnumerable<T>
. Запрос выполняет итерацию по коллекции и выполняет последовательность методов (например, Contains
, Where
и т. Д.) Для элементов в коллекции.
LINQ to SQL-запросы работают с коллекциями IQueryable<T>
. Запрос преобразуется компилятором в дерево выражений, и это дерево выражений затем переводится в SQL и передается в базу данных.
Обычно LINQ to SQL жалуется на то, что метод не может быть переведен в SQL, даже если этот метод отлично работает в запросе LINQ to Objects. (В других случаях вы можете не видеть исключение, но результаты запроса могут слегка отличаться между LINQ to Objects и LINQ to SQL.)
Например, LINQ to SQL захлебнется этим простым запросом, тогда как LINQ to Object будет в порядке:
var query = from n in names
orderby n.LastName.TrimStart(',', ' ').ToUpper(),
n.FirstName.TrimStart(',', ' ').ToUpper()
select new { n.FirstName, n.LastName };
(Часто можно обойти эти ограничения, но тот факт, что вы не можете гарантировать, что любой произвольный запрос LINQ to Objects будет работать как запрос LINQ to SQL, говорит мне, что они не совпадают!)