我是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
:
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();