Lambda表达

时间:2009-10-22 18:48:30

标签: c# lambda

我可以使用lambda表达式简化此语句吗?

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

4 个答案:

答案 0 :(得分:4)

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

这实际上是否更简单是一个品味问题。

答案 1 :(得分:3)

老实说,我看起来很清楚。我认为在这种情况下,lambda的可读性可能较低,即Brandon在下面发布的内容。

(布兰登的帖子被盗)

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

就可读性而言,我认为几个循环比lambda解决方案更可取,我认为你的解决方案比循环更好。

答案 2 :(得分:2)

我同意Ed Swangren的观点。这看起来简洁易读。

实际上,你的问题的答案取决于三件事:

  1. 您想要达到什么目标 - 更好的可读性?更好的性能?等
  2. 'accounts'的类型
  3. 如何使用生成的集合。
  4. 如果你想要更好的性能,并且如果'accounts'是一个List,并且生成的集合将被迭代或传递给另一个方法以便在这些代码行之后很快迭代,我会做类似的事情:

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

    肯定它比你的LINQ语句更不易读,但是我会使用这2行而不是账号。选择.......

    当然,它对性能进行了更好的优化,我相信这一点非常重要。

答案 3 :(得分:0)

accounts
    .SelectMany (
        a => AccountProjects, 
        (a, ct) => 
        new  
        {
            a = a, 
            ap = ap
        }
    )
    .Where (t => (t.ap.AccountProjectID == t.a.accountProjectId))
    .Select (t => t.ap)