Быстрый и Выражение Запроса — там какое-либо преимущество (преимущества) одного по другому?

247
задан Uwe Keim 6 June 2018 в 18:40
поделиться

11 ответов

Ни то, ни другое не лучше: они служат разным потребностям. Синтаксис запроса имеет свое значение, когда вы хотите использовать несколько переменных диапазона . Это происходит в трех ситуациях:

  • При использовании ключевого слова let
  • При наличии нескольких генераторов ( из предложений )
  • При выполнении соединений

Вот пример (из примеров LINQPad) :

string[] fullNames = { "Anne Williams", "John Fred Smith", "Sue Green" };

var query =
  from fullName in fullNames
  from name in fullName.Split()
  orderby fullName, name
  select name + " came from " + fullName;

А теперь сравните это с тем же синтаксисом метода:

var query = fullNames
  .SelectMany (fName => fName.Split().Select (name => new { name, fName } ))
  .OrderBy (x => x.fName)
  .ThenBy  (x => x.name)
  .Select  (x => x.name + " came from " + x.fName);

Синтаксис метода, с другой стороны, раскрывает весь спектр операторов запроса и является более кратким для простых запросов. Вы можете получить лучшее из обоих миров, смешав синтаксис запроса и метода. Это часто делается в запросах LINQ to SQL:

var query =
  from c in db.Customers
  let totalSpend = c.Purchases.Sum (p => p.Price)    // Method syntax here
  where totalSpend > 1000
  from p in c.Purchases
  select new { p.Description, totalSpend, c.Address.State };
247
ответ дан 23 November 2019 в 03:02
поделиться

Я предпочитаю использовать последнего (иногда называемый "синтаксис понимания запроса"), когда я могу записать целому выражению тот путь.

var titlesQuery = from e in entries
                  where e.Approved
                  orderby e.Rating
                  select e.Titles;

var title = titlesQuery.FirstOrDefault();

, Как только я должен добавить (круглые скобки) и .MethodCalls(), я изменяюсь.

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

var title = entries
    .Where (e => e.Approved)
    .OrderBy (e => e.Rating)
    .Select (e => e.Title)
    .FirstOrDefault();

я нахожу это немного легче читать.

58
ответ дан Jay Bazuzi 23 November 2019 в 03:02
поделиться

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

Быстрый синтаксис, с другой стороны, имеет намного больше методов и операций, которые не представлены через синтаксис запроса. Также, так как они - просто дополнительные методы, можно записать собственное.

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

29
ответ дан geppy 23 November 2019 в 03:02
поделиться

Я не получаю синтаксис запроса вообще. Нет только никакой причины его в моем уме. позвольте может быть достигнут с.Select и анонимными типами. Я просто думаю, что вещи выглядят намного более организованными с "пунктуацией" там.

14
ответ дан Instance Hunter 23 November 2019 в 03:02
поделиться

Быстрый интерфейс, если существует только где. Если мне нужны выбор или orderby, я обычно использую синтаксис Запроса.

13
ответ дан James Curran 23 November 2019 в 03:02
поделиться

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

8
ответ дан Kozyarchuk 23 November 2019 в 03:02
поделиться

Мне действительно нравится Быстрый синтаксис, и я пытаюсь использовать его, где я могу, но в определенных случаях, например, где я использую соединения, я обычно предпочитаю синтаксис Запроса в тех случаях, которые я нахожу легче считать, и я думаю, что некоторые люди более знакомы для Запросов (подобного SQL) синтаксиса, чем лямбды.

4
ответ дан CMS 23 November 2019 в 03:02
поделиться

В то время как я действительно понимаю и как быстрый формат, я придерживался для Запросов в настоящее время по причинам удобочитаемости. Люди, просто представляемые LINQ, найдут Запрос намного более удобным в чтение.

4
ответ дан LizB 23 November 2019 в 03:02
поделиться

Я предпочитаю синтаксис запроса, когда я произошел из традиционного веб-программирования с помощью SQL. Для меня намного легче перенести мою голову. Однако это думает, что я начну использовать.Where (лямбда), поскольку это определенно намного короче.

4
ответ дан Steve Tranby 23 November 2019 в 03:02
поделиться

Я использовал Linq в течение приблизительно 6 месяцев теперь. Когда я сначала начал использовать его, я предпочел синтаксис запроса, поскольку это очень похоже на T-SQL.

, Но, я постепенно возвращаюсь к первому теперь, когда легко записать допускающие повторное использование блоки кода как дополнительные методы и просто объединить их в цепочку вместе. Хотя я действительно нахожу, что помещение каждого пункта на его собственной строке помогает много с удобочитаемостью.

4
ответ дан Appulus 23 November 2019 в 03:02
поделиться

Я знаю, что этот вопрос помечен тегом C #, но синтаксис Fluent мучительно многословен в VB.NET.

5
ответ дан 23 November 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: