2010-07-02 124 views
4

喜有反正我通过i.Number,我写的财产以后这样LINQ集团通过两条语句

  var r = from i in myList 
       group i by i.Number 
        into grp 
        select new 
        { 
         Reported = grp.Select(x => x.CurrentStatus).First(), 
         Number = grp.Key, 
         Sum = grp.Sum(x => x.Details[0].Quantity), 
         Name = grp.Select(x => x.Name).First(), 
         Details = grp.Select(x => x.Details).First(), 
         Descriptions = grp.Select(x => x.Descriptions).First(), 
         AssignmentId = grp.Select(x => x.AssignmentId).First(), 
         Listor = grp.Select(x => x.Number).Count() 
        }; 

这个

  var r = from i in myList 
       group i by i.Number, i.CurrentStatus 
        into grp 
        select new 
        { 
         Reported = grp.Select(x => x.CurrentStatus).First(), 
         Number = grp.Key, 
         Sum = grp.Sum(x => x.Details[0].Quantity), 
         Name = grp.Select(x => x.Name).First(), 
         Details = grp.Select(x => x.Details).First(), 
         Descriptions = grp.Select(x => x.Descriptions).First(), 
         AssignmentId = grp.Select(x => x.AssignmentId).First(), 
         Listor = grp.Select(x => x.Number).Count() 
        }; 

,这样我可以按“组。 CurrentStatus”

回答

10

集团由一个匿名类型:

 var r = from i in myList 
      group i by new { i.Number, i.CurrentStatus } 
       into grp 
       select new 
       { 
        Reported = grp.Key.CurrentStatus, 
        Number = grp.Key.Number, 
        Sum = grp.Sum(x => x.Details[0].Quantity), 
        Name = grp.Select(x => x.Name).First(), 
        Details = grp.Select(x => x.Details).First(), 
        Descriptions = grp.Select(x => x.Descriptions).First(), 
        AssignmentId = grp.Select(x => x.AssignmentId).First(), 
        Listor = grp.Select(x => x.Number).Count() 
       }; 
+1

使用'Reported = grp.Key.CurrentStatus'而不是'Reported = grp.Select(x => x.CurrentStatus).First()'。 – 2010-07-02 13:38:35

+0

@Jaroslav:好点!我用你的修复更新了答案。 – Quartermeister 2010-07-02 14:00:09

+0

非常感谢它的作品! – Tan 2010-07-05 13:18:11