如何使用Linq从List(Of T)获得不同的值

时间:2012-03-10 09:24:14

标签: vb.net linq list distinct

我有一个List(Of Hardware) - 列表名为HWModels

类硬件具有以下属性:

  • MODELNAME
  • 状态
  • CPUStatus
  • MEMORYSTATUS
  • DiskStatus

通过读取CSV文件来填充列表,一旦填充完毕,我想根据ModelName返回不同​​的记录

我试过这样做:

(From a In HWModels Select a.ModelName).Distinct

但这不对,因为我最终得到的只是ModelName的列表而没有别的。

如何让Distinct函数返回列表中的所有其他类成员?

2 个答案:

答案 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