选择LINQ中不在Group By子句中的字段

时间:2011-12-28 20:15:06

标签: c# .net sql-server linq

任何人都可以帮助我 “如何选择LINQ中不在Group By子句中的字段”

  var ReportData = 
      from a in context.Table1
      from b in context.Table2
      where a.personelID == b.ID
      && a.DateField.Value.Year == 2011
      group a by new { a.personelID, b.Name, b.Surname} into grouping
      select new
      {
           // grouping.Key.DateField,
          Name= grouping.Key.Name,
          Surname= grouping.Key.Surname,
          PagaBruto =  grouping.Sum(i => i.Bruto)),
      };

我无法选择 Table1 中的字段"DateField",我不希望在Group By中包含此字段,因为我会得到错误的结果。 谢谢!

2 个答案:

答案 0 :(得分:7)

我认为您需要在分组之前选择两个表成员,以便从两者中选择数据。我做了一个连接,而不是你的where子句。

(from a in context.Table1
 join b in context.Table2 on a.PersonalID equals b.ID
 select new { A=a, B=b } into joined
 group joined by new { joined.A.PersonalID, joined.B.Name, joined.B.Surname } into grouped
 select grouped.Select(g => new { 
                                    DateField= g.A.Datefield,
                                    Name = g.B.Name,
                                    Surname = g.B.Surname,
                                    PagaBruto = g.A.Sum(i => i.Bruto)
                                })).SelectMany(g => g);

答案 1 :(得分:1)

也许这会有用吗?

  group a by new { a.personelID, b.Name, b.Surname, a.DateField} into grouping
  select new
  {
      DateField = grouping.Key.DateField,
      Name= grouping.Key.Name,
      Surname= grouping.Key.Surname,
      PagaBruto =  grouping.Sum(i => i.Bruto)),
  };