我有一个List(Of Hardware) - 列表名为HWModels
类硬件具有以下属性:
通过读取CSV文件来填充列表,一旦填充完毕,我想根据ModelName返回不同的记录
我试过这样做:
(From a In HWModels Select a.ModelName).Distinct
但这不对,因为我最终得到的只是ModelName的列表而没有别的。
如何让Distinct函数返回列表中的所有其他类成员?
答案 0 :(得分:11)
LINQ to Objects没有提供任何可以做到的“整齐地通过投影来区分”。您可以按名称分组,然后在每个组中取第一个元素,但这非常难看。
我的MoreLINQ提供DistinctBy
方法 - 在您使用的C#中:
var distinct = HWModels.DistinctBy(x => x.ModelName).ToList();
大概VB会像
Dim distinct = HWModels.DistinctBy(Function(x) x.ModelName).ToList
对任何语法错误表示道歉:(
答案 1 :(得分:7)
这将按首选属性对对象进行分组,然后选择每个对象中的第一个,删除重复项。
Dim newlist = HWModels.GroupBy(Function(x) x.ModelName).Select(Function(x) x.First).ToList