分组,Sum,加入Linq

时间:2011-04-05 07:31:23

标签: linq

我有这个简单的SQL查询:

select c.LastName, Sum(b.Debit)- Sum(b.Credit) as OpenBalance from Balance as b
inner join Job as j on (b.Job = j.ID)
inner join Client as c on (j.Client = c.ID)
Group By c.LastName

我试图将它转换为linq,就像这样:

from b in Balance
join j in Job on b.Job equals j.ID
join c in Client on j.Client equals c.ID
group b by new { c.LastName } into g
select new { 
     Name = c.Lastname, 
     OpenBalance = g.Sum(t1 => t1.Credit) 
       }

但是当我尝试在 LINQPad 中运行它时,我收到以下消息:

  

名称'c'不存在于   当前背景

并在c.Lastname语句中突出显示select new

对此的任何帮助将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:4)

嗯,您已将b分组为c.LastName。因此,在分组操作之后,您正在处理g这是一个分组,其中元素类型是b的类型,而 type是c.LastName的类型。很可能你只需要:

select new { 
    Name = g.Key,
    OpenBalance = g.Sum(t1 => t1.Credit) 
}

...但如果您需要了解c的任何其他方面,则需要更改分组表达式。