转换为Lambda表达式

时间:2009-02-25 15:22:13

标签: linq

我有以下表达式

        var q = from c in D1 
                join dp in
                    (from e in E1
                     group e by e.ID into g
                     select new { ID = g.Key, Cnt = g.Count() })
                on c.ID
                equals dp.ID 
                into dpp from v in dpp.DefaultIfEmpty() 
                select new { c.ID, Cnt= v.Cnt ?? 0 };

如何将其转换为Lambda表达式?

2 个答案:

答案 0 :(得分:2)

这是一种方法。这种与上述相符。

var subquery = E1
  .GroupBy(e => e.Id)
  .Select(g => new { ID = g.Key, Cnt = g.Count()});
  //.ToList();

var q = D1
  .GroupJoin(
    subquery,
    c => c.ID,
    dp => dp.ID,
    (c, g) => new {ID = c.ID, Cnt=g.Any() ? g.First().Cnt : 0 }
  )

重构后,我想出了这个:

var q = D1
  .GroupJoin(
    E1,
    d => d.ID,
    e => e.ID,
    (d, g) => new {ID = d.ID, Cnt = g.Count()}
  );

对于比较,查询理解形式为:

var q = from d in D1
  join e in E1 on d.ID equals e.ID into g
  select new {ID = d.ID, Cnt = g.Count()};

答案 1 :(得分:1)

你为什么要转换它?

对于像这样的复杂查询,您在此处使用的查询语法总是更加清晰。