如何在VB.NET中使用LINQ将数据隔离到不同的桶中

  • 本文关键字:数据 隔离 LINQ VB NET vb.net linq
  • 更新时间 :
  • 英文 :


我是VB新手。在VB中使用LINQ无法找到将数据隔离到不同桶中的方法。净?

我有一个对象列表,基于一个特定的属性,我想根据属性的不同值对它进行划分。

编辑:

static void Main(string[] args)
{
    List<DemoClass> ListDemoClass = new List<DemoClass>();
    DemoClass demo1 = new DemoClass();
    demo1.city = "Pune";
    demo1.name = "Pranav";
    ListDemoClass.Add(demo1);
    DemoClass demo2 = new DemoClass();
    demo1.city = "Pune";
    demo1.name = "Brij";
    ListDemoClass.Add(demo2);
    DemoClass demo3 = new DemoClass();
    demo1.city = "Pune";
    demo1.name = "Piyush";
    ListDemoClass.Add(demo3);
    DemoClass demo4 = new DemoClass();
    demo1.city = "NJ";
    demo1.name = "Igal";
    ListDemoClass.Add(demo4);
    DemoClass demo5 = new DemoClass();
    demo1.city = "NJ";
    demo1.name = "Mithun";
    ListDemoClass.Add(demo5);
    List<List<DemoClass>> buckets = ListDemoClass
        .GroupBy(x => x.city)
        .Select(grp => grp.ToList())
        .ToList();
}

预期输出是一个包含两个列表的列表,根据城市分别包含2个和3个对象。

然而,这是不工作。结果是我有一个包含1和4个元素的列表,这是错误的。在第二个列表中,对象为空。

这个问题很不清楚,但也许这有帮助,使用Enumerable.GroupBy:

VB:

Dim buckets As List(Of List(Of ClassName)) = list.
        GroupBy(Function(x) x.PropertyName).
        Select(Function(grp) grp.ToList()).
        ToList()
c#

List<List<ClassName>> buckets = list
     .GroupBy(x => x.PropertyName)
     .Select(grp => grp.ToList())
     .ToList();

您的演示代码只初始化demo1属性,而不是其他对象。

你可以这样写:

Dim result As List(Of List(Of SomeType)) = list.GrouBy(Function(x) x.Property).Select(Function(x) x.ToList()).ToList()

在c#中,您可以按照以下方式将项分组为列表的列表:

List<List<SomeType>> result = list.GrouBy(x => x.Property).Select(x => x.ToList()).ToList();

最新更新