Какое утверждение LINQ лучше и почему? - PullRequest
2 голосов
/ 26 января 2010

В обоих операторах я пытаюсь получить идентификатор категории, имя которой указано в переменной;

Оба работают нормально. В чем разница и какая из них лучше?

string name = "Progreammers";

var categoryID = from c in DataContext.Categories
                             where c.Name == name
                             select c.CategoryID;

var categoryID  = 
  DataContext.Categories.Single(c => c.Name == name).CategoryID;

РЕДАКТИРОВАТЬ: Существует только одно Имя (поле) для каждого CategoryID (поле) в таблице.

Ответы [ 3 ]

12 голосов
/ 26 января 2010

Два оператора выполняют разные функции.

Первая может вернуть несколько записей.

Второй вернет только один CategoryID. Также будет выдано исключение, если хотя бы одна запись не найдена.

Следующий запрос будет эквивалентен вашему первому утверждению:

var categoryID = DataContext.Categories.Where(c => c.Name == name).CategoryID;

И следующий синтаксис запроса эквивалентен второму оператору:

var categoryID = (from c in DataContext.Categories
                 where c.Name == name
                 select c.CategoryID).Single();

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

3 голосов
/ 26 января 2010

Они не одинаковы.

Первый вернет список, если совпадений много.

Второй вернет только один.

0 голосов
/ 26 января 2010

Как уже отмечалось, они разные, но я думаю, что цель вашего вопроса - спросить, есть ли разница между выражениями LINQ в стиле "SQL" и в стиле "Lambda".

Если так, то здесь есть похожий вопрос:

LINQ: Точечная запись против выражения запроса

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