2009-02-12 20 views
0

我有一个具体对象列表。有些需要进行分析,以决定保留哪一个(当该组包含多于一次的情况)。Linq的数据分组还是不可能?

下面是一个简单的例子:

List<MyObject> arrayObject = new List<MyObject>(); 
arrayObject.Add(new MyObject { Id = 1, Name = "Test1", Category = "Cat1"}); 
arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat2" }); 
arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat3" }); 

这将需为唯一的分析结束:

arrayObject.Add(new MyObject { Id = 1, Name = "Test1", Category = "Cat1"}); 
arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat3" }); 

正如你看到CAT2 ID2为不见了,因为业务逻辑将其取而代之。所以应该做的是能够让那些拥有多于一个类别的人以及应用逻辑。

这是我到目前为止有:

 List<MyObject> arrayObject = new List<MyObject>(); 
     arrayObject.Add(new MyObject { Id = 1, Name = "Test1", Category = "Cat1"}); 
     arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat2" }); 
     arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat3" }); 


     var filtered = from arrayObject1 in arrayObject 
         group arrayObject by new { arrayObject1.Id, arrayObject1.Name } 
         into g 
         select new { KKey = g.Key, Obj = g }; 


     foreach(var c in filtered) 
     { 
      Console.WriteLine(c.KKey + ":" + c.Obj.Count()); 
      foreach (var cc in c.Obj) 
      { 
       //Put some Business Logic here to get only 1... but to simplify will just print 
       Console.WriteLine("--->" + cc); 
      } 
     } 

问题是 1)CC是没有的类型MyObject的,第二,我有新获得该组中的所有属性..我可能会有几件物品会有所不同。

Linq有可能吗?因为我可以在不使用Linq的情况下做到这一点...但我正在尝试尽可能多地应用此框架的新功能(3.5)。谢谢

回答

4

的问题是在这行:

group arrayObject by 

应该说:

group arrayObject1 by 
+0

噢,我的!不行。你有一个想法,可以让我不必通过新的{arrayObject1.Id,arrayObject1.Name}添加组arrayObject1中的所有字段。事实上,真正的物体有几个属性。没有办法通过“除x之外的所有字段”进行分组吗? – 2009-02-12 15:04:06