2011-12-28 67 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