我是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项列表的列表,这是错误的。在第二个列表中,对象为空。
答案 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();