LINQ 帮助,对对象中的项目集进行分组

发布于 2024-10-24 03:26:52 字数 963 浏览 1 评论 0原文

这是我的 2 个类,

public class Item
{
    public string Path { get; set; }
    public List<Sub> Subs { get; set; }
}

public class Sub
{
    public string Name { get; set; }
}

private void Test()
{
    Sub sub1 = new Sub() { Name = "SUB1" };
    Sub sub2 = new Sub() { Name = "SUB2" };
    Sub sub3 = new Sub() { Name = "SUB3" };

    Item item1 = new Item() { Path = "/Path1" };
    Item item2 = new Item() { Path = "/Path2" };
    Item item3 = new Item() { Path = "/Path3" };

    item1.Subs.Add(sub1);
    item1.Subs.Add(sub2);

    item2.Subs.Add(sub1);
    item2.Subs.Add(sub3);

    item3.Subs.Add(sub1);
    item3.Subs.Add(sub2);
    item3.Subs.Add(sub3);

    List<Item> items = new List<Item>();
    items.Add(item1);
    items.Add(item2);
    items.Add(item3);
}

我想要一个类似于

sub1 -> 的分组集合。项目1、项目2、项目3

子2 ->项目1、项目3

子3 -> item2, item3

我怎样才能做到这一点?

非常感谢!

Here's my 2 classes

public class Item
{
    public string Path { get; set; }
    public List<Sub> Subs { get; set; }
}

public class Sub
{
    public string Name { get; set; }
}

private void Test()
{
    Sub sub1 = new Sub() { Name = "SUB1" };
    Sub sub2 = new Sub() { Name = "SUB2" };
    Sub sub3 = new Sub() { Name = "SUB3" };

    Item item1 = new Item() { Path = "/Path1" };
    Item item2 = new Item() { Path = "/Path2" };
    Item item3 = new Item() { Path = "/Path3" };

    item1.Subs.Add(sub1);
    item1.Subs.Add(sub2);

    item2.Subs.Add(sub1);
    item2.Subs.Add(sub3);

    item3.Subs.Add(sub1);
    item3.Subs.Add(sub2);
    item3.Subs.Add(sub3);

    List<Item> items = new List<Item>();
    items.Add(item1);
    items.Add(item2);
    items.Add(item3);
}

I want a grouped collection that looks something like this

sub1 -> item1, item2, item3

sub2 -> item1, item3

sub3 -> item2, item3

How can I accomplish this?

Thanks much!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

念三年u 2024-10-31 03:26:52

我假设 item1、item2、item3 是名称为 items 的新 List 的一部分

//List<Item> items = new List<Item>();
//items.Add(item1);
//items.Add(item2);
//items.Add(item3);

var groupedBySub = from item in items
                   from s in item.Subs
                   group item by s into g
                   select new{ Sug = g.Key, Items = g };

I'm assuming item1, item2, item3 are part of a new List<Item> whose name is items

//List<Item> items = new List<Item>();
//items.Add(item1);
//items.Add(item2);
//items.Add(item3);

var groupedBySub = from item in items
                   from s in item.Subs
                   group item by s into g
                   select new{ Sug = g.Key, Items = g };
睫毛溺水了 2024-10-31 03:26:52

v4.0 是这样的吗?

new[]{ item1, item2 ,item3 }
   .SelectMany(i => i.Subs,(i,s)=>new { Sub=s,Item=i })
   .ToLookup(l=>l.Sub,l=>l.Item)

我不知道这是否会在 3.5 中工作

Something like this i v4.0?

new[]{ item1, item2 ,item3 }
   .SelectMany(i => i.Subs,(i,s)=>new { Sub=s,Item=i })
   .ToLookup(l=>l.Sub,l=>l.Item)

I dont know if that'll work in 3.5 though

べ繥欢鉨o。 2024-10-31 03:26:52

这是一种方法:

var items = new[] {item1, item2, item3};

        var result = from s in items.SelectMany((i, index) => i.Subs)
                     group s by s.Name
                     into g
                     select new {
                       Sub = g.Key,
                       Items = items
                          .Where(i => i.Subs.Any(s => s.Name == g.Key))
                          .Select(i => i)
                          .ToList()
                     };

This is one way:

var items = new[] {item1, item2, item3};

        var result = from s in items.SelectMany((i, index) => i.Subs)
                     group s by s.Name
                     into g
                     select new {
                       Sub = g.Key,
                       Items = items
                          .Where(i => i.Subs.Any(s => s.Name == g.Key))
                          .Select(i => i)
                          .ToList()
                     };
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文