В чем разница между этими двумя утверждениями? - PullRequest
1 голос
/ 18 марта 2011
List<int> result1 = 
        (from number in list where number < 3 select number).ToList();

List<int> result2 = list.Where(n => n<3).ToList();

В чем разница между этими двумя различными утверждениями?

Ответы [ 4 ]

3 голосов
/ 18 марта 2011

Первая нотация обычно называется «синтаксис запроса», вторая - «синтаксис метода» (или точечная нотация или лямбда-синтаксис) - обе они скомпилированы в один и тот же код, но, как уже упоминалось, обычно одна из двухявляется более кратким, для большинства сценариев это точечная нотация, но особенно для объединения или группировки по нескольким перечислениям синтаксис запроса действительно блестящий.

Также проверьте Синтаксис запроса LINQ против синтаксиса метода (C #) :

Большинство запросов во вводной документации LINQ пишутся как выражения запросов с использованием декларативного синтаксиса запросов, введенного в C # 3.0.Однако общеязыковая среда выполнения .NET (CLR) сама по себе не имеет понятия синтаксиса запроса.Следовательно, во время компиляции выражения запроса переводятся в нечто, понятное CLR: вызовы методов.Эти методы называются стандартными операторами запросов и имеют такие имена, как Where, Select, GroupBy, Join, Max, Average и т. Д.Вы можете вызывать их напрямую, используя синтаксис метода вместо синтаксиса запроса.

В общем, мы рекомендуем синтаксис запроса, потому что он обычно проще и более читабелен;однако нет никакой семантической разницы между синтаксисом метода и синтаксисом запроса.

3 голосов
/ 18 марта 2011

Разницы нет.Одним из них является просто расширение языка, которое похоже на SQL вместо использования делегатов для достижения того же результата.

3 голосов
/ 18 марта 2011

Ничего.

Первый использует нотацию LINQ, а второй использует нотацию метода расширения - они оба делают одно и то же.

Используйте то, что вам больше нравится. :)

0 голосов
/ 18 марта 2011

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

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