在LINQ中查询自定义集合集合

时间:2011-12-12 10:09:11

标签: linq collections

我有自定义类型名称 Netsgroup ,它是 Net 类的集合。

Net 类,contsains: Netname 和字符串部件的列表。

class Netsgroup:  CollectionBase
{
 // a collection of nets
    public Net[] nets
    {
        get { return (Net[]) this.InnerList.ToArray(typeof(Net)); }
    }
}

public class Net
{

    string netname;
    public string Netname
    {
        get { return netname; }
        set { netname = value; }
    }


   List<string> parts= new List<string>();
    public  List<string> Parts
    {
        get { return parts; } 
    }
}

Netsgroup的一个例子是:

  

Net1 u1,u2,u3

     

Net2 u4,u5,u3

     

Net3 u4,u6,u7

每一行都有Netname和Parts。

我想找到Netsgroup集合中的重复项。

喜欢:

  

net1,net2有u3

     

net2,net3有u4

如何与所有网络中的部分相交以查找重复项?

谢谢,Avi。

2 个答案:

答案 0 :(得分:2)

我认为使用LINQ最容易做到这一点:

var duplicates =
    from net in netsgroup.nets
    from part in net.Parts
    group net by part into g
    where g.Count() >= 2
    select g;

如果要以指定的格式将结果写入控制台,可以使用以下内容:

foreach (var dup in duplicates)
    Console.WriteLine(
        "{0} has {1}", string.Join(", ", dup.Select(n => n.Netname)), dup.Key);

答案 1 :(得分:1)

IEnumerable<string> parts1 = netGroup1.nets.SelectMany(n => n.Parts);
IEnumerable<string> parts2 = netGroup2.nets.SelectMany(n => n.Parts);

IEnumerable<string> intersectedNets = Enumerable.Intersect(parts1, parts2);