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

Ben*_*her 5 linq vb.net list distinct

我有一个List(Of Hardware) - 调用List HWModels

类硬件具有以下属性:

  • 型号名称
  • 状态
  • CPUStatus
  • 内存状态
  • DiskStatus

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

我试过这样做如下:

(From a In HWModels Select a.ModelName).Distinct
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 13

LINQ to Objects并没有提供任何可以"完全独立于投影"的东西.您可以按名称分组,然后获取每个组中的第一个元素,但这非常难看.

我的MoreLINQ提供了一种DistinctBy方法 - 在C#中你使用:

var distinct = HWModels.DistinctBy(x => x.ModelName).ToList();
Run Code Online (Sandbox Code Playgroud)

据推测,VB就是这样的

Dim distinct = HWModels.DistinctBy(Function(x) x.ModelName).ToList
Run Code Online (Sandbox Code Playgroud)

抱歉任何语法错误:(


小智 7

这将按首选属性对对象进行分组,然后选择每个对象中的第一个,删除重复项.

 Dim newlist = HWModels.GroupBy(Function(x) x.ModelName).Select(Function(x) x.First).ToList
Run Code Online (Sandbox Code Playgroud)