【发布时间】:2009-02-12 14:47:31
【问题描述】:
我有一个具体对象的列表。有些需要分析以决定保留哪一个(当组包含超过 1 次出现时)。
这是一个简化的例子:
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 已消失,因为业务逻辑将其删除。所以应该做的就是能够得到超过1个类别的人,并在上面应用一个逻辑。
这是我目前所拥有的:
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 类型,其次,我必须通过 new 获取组中的所有属性......我可能有几个不同的对象。 p>
Linq 可以吗?因为,我可以在不使用 Linq 的情况下做到这一点......但我正在尝试尽可能多地应用这个框架(3.5)的新东西。
【问题讨论】: