Лямбда-выражение - PullRequest
       12

Лямбда-выражение

7 голосов
/ 22 октября 2009

Можно ли упростить это утверждение с помощью лямбда-выражения?

var project = from a in accounts
              from ap in a.AccountProjects
              where ap.AccountProjectID == accountProjectId
              select ap;

Ответы [ 4 ]

4 голосов
/ 22 октября 2009
var project = accounts.SelectMany(a => a.AccountProjects)
                      .Where(x => x.AccountProjectID == accountProjectId);

Является ли это на самом деле проще - дело вкуса.

3 голосов
/ 22 октября 2009

Честно говоря, это выглядит довольно ясно для меня. Я думаю, что лямбда в этом случае может быть менее читабельной, то есть чем-то вроде Брэндона, опубликованного ниже.

(украдено с поста Брэндона)

var project = accounts.Select(a => a.AccountProjects)
                      .Where(x => x.AccountProjectID == accountProjectId);

Что касается читабельности, я думаю, что пара циклов предпочтительнее лямбда-решения, и я думаю, что ваше решение предпочтительнее циклов.

2 голосов
/ 22 октября 2009

Я согласен с Эдом Свангреном. Это выглядит кратким и достаточно читабельным.

На самом деле ответ на ваш вопрос зависит от 3 вещей:

  1. Чего вы хотите добиться - лучшей читаемости? лучшая производительность? и т.д.
  2. Тип «счетов»
  3. Как будет использоваться полученная коллекция.

Если вам нужна более высокая производительность, а в случае, когда «account» - это List, а полученная коллекция будет повторена или передана другому методу для итерации достаточно скоро после этих строк кода, я бы сделал что-то подобное: *

List<Account> filteredAccounts = new List<Account>();
accounts.ForEach(a => { if (a.AccountProjectID == accountProjectId) filteredAccounts.Add(a); });

Конечно, он менее читабелен, чем ваш оператор LINQ, но я бы использовал эти 2 строки вместо учетных записей. Выберите .......

И, конечно, он гораздо лучше оптимизирован для производительности, что, я считаю, всегда важно.

0 голосов
/ 02 апреля 2012
accounts
    .SelectMany (
        a => AccountProjects, 
        (a, ct) => 
        new  
        {
            a = a, 
            ap = ap
        }
    )
    .Where (t => (t.ap.AccountProjectID == t.a.accountProjectId))
    .Select (t => t.ap)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...