如何在VB.NET中使用LINQ将数据分成不同的桶?

时间:2015-10-19 13:55:06

标签: vb.net linq

我是VB.NET的新手,无法在VB.NET中使用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项列表的列表,这是错误的。在第二个列表中,对象为空。

2 个答案:

答案 0 :(得分:1)

这个问题还不清楚,但也许这会有所帮助,使用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属性而不是其他对象。

答案 1 :(得分:0)

您可以使用以下内容:

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();