2011-12-28 49 views
3
条款

可能有人帮我约 “如何选择一个领域,是不是在Group By子句中的LINQ”选择一个字段,是不是在集团通过LINQ

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)), 
     }; 

我不能选择字段"DateField"表1,我不想在Group By这个字段,因为我会得到一个错误的结果。 感谢!

+3

每个组中有许多'DateField'值,您需要哪一个? – dasblinkenlight 2011-12-28 20:17:19

+2

如果在group by子句中包含“DateField”会给出错误的结果,那么看起来每个分组的元素具有不同的DateField值。在这种情况下,您不希望将哪些值包含在结果序列的元素中。 – phoog 2011-12-28 20:21:17

+1

当你不想在分组中使用DateField时,这意味着可能在一个分组中存在两个或多个DateField,那么如何通过两个或多个DateField来选择一个分组呢? – 2011-12-28 20:24:13

回答

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)), 
    }; 
+6

这也将按日期值分组。我相信这不是意图 – 2011-12-28 20:29:27

+0

@UfukHacıoğulları我同意你 – 2011-12-28 21:52:25

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); 
+0

不错的答案家伙;) – 2011-12-28 21:51:04