Запрос пользовательской коллекции коллекций в LINQ - PullRequest
1 голос
/ 12 декабря 2011

У меня есть пользовательское имя типа Netsgroup , которое является коллекцией Net class.

Net class, 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

Как я могу пересечьЧасти из всех сетей, чтобы найти дубликаты?

Спасибо, Ави.

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Я думаю, что сделать это было бы проще всего с помощью 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 голос
/ 12 декабря 2011
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...