2009-02-12 24 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