2016-01-28 5 views
0

В чем разница между двумя фрагментами кода?В чем разница между двумя запросами linq

И это лучше, чем используется?

DataClassesDataContext db = new DataClassesDataContext(); 
var QSelect1 = from _ADS in db.tblADs 
       where _ADS.fldAdsId == Convert.ToInt32(e.CommandArgument) 
       select _ADS; 
var QSelect2 = db.tblADs.Where(x => x.fldAdsId == Convert.ToInt32(e.CommandArgument)); 
+3

Первый будет преобразован ко второй при компиляции кода. Поэтому ответ заключается в том, что они отличаются только синтаксисом и стоимостью компиляции. – dotctor

+0

... и для меня предпочтительнее использовать второй синтаксис «цепочка методов», а не прежний «выражение запроса» для курсов –

ответ

2

Первый - выражение запроса, а второе - выражение Лямбда. Они эквивалентны. И они в конце концов одинаковы.

Для получения дополнительной информации см: Query Syntax and Method Syntax in LINQ (C#)

Одна вещь, чтобы помнить о том, что есть много операторов, которые не имеют ключевое слово в синтаксисе запроса, и вы должны использовать свободно синтаксис. Это означает, что любой оператор вне из следующих действий:

Where, Select, SelectMany 
OrderBy, ThenBy, OrderByDescending, ThenByDescending 
GroupBy, Join, GroupJoin 

Вы также можете использовать версию микса из них:

int matches = (from n in names where n.Contains ("a") select n).Count(); 
+1

почти - второй - это «цепочка методов» - что более похоже на лямбда, чем первая, которая выглядит как близкий родственник sql –