同组的对象C#

时间:2011-03-22 17:55:59

标签: c# linq collections

我有一个对象列表,这些对象被其中一个属性“ID”唯一地键入或标识。我需要对不同ID的所有对象进行分组,这些对象的其余属性都是相同的。

示例:Obj具有属性“ID”,“E1”,“E2”,“E3”。请注意,这些都是Obj的所有属性。

我知道所有的Obj's ID都不同,但是如果不同的Obj的E1,E2和E3相同,我想分组。所以我会有一系列具有相同E1,E2,E3但不同ID的Obj。

在C#中处理这个问题的最简单方法是什么?任何想法?

3 个答案:

答案 0 :(得分:9)

嗯,像这样的东西适用于LINQ:

var groups = collections.GroupBy(x => new { x.E1, x.E2, x.E3 });

这将为您提供一系列可以迭代的分组。例如:

var groups = collections.GroupBy(x => new { x.E1, x.E2, x.E3 });
foreach (var group in groups)
{
    Console.WriteLine("Key: {0}", group.Key);
    foreach (var item in group)
    {
        Console.WriteLine("  ID: {0}", item.ID);
    }
}

答案 1 :(得分:0)

在对象之间实现公共属性/方法的接口。使用接口类型进行交互。

答案 2 :(得分:0)

Linq听起来不错。

public class YourClass
{
    public string ID { get; set; }
    public string E1 { get; set; }
    public string E2 { get; set; }
    public string E3 { get; set; }
}

public static YourClass[] GetClassArray(IEnumerable<YourClass> objects)
{
    return objects.OrderBy<YourClass, string>(c => c.E1)
                  .ThenBy<YourClass, string>(c => c.E2)
                  .ThenBy<YourClass, string>(c => c.E3)
                  .ThenBy<YourClass, string>(c => c.ID)
                  .ToArray<YourClass>();
}