2012-03-10 37 views
4

我有一個List(硬件)的(T)得到重複值 - 該列表稱爲HWModels如何從列表使用LINQ

一流的硬件具有以下屬性:

  • MODELNAME
  • 狀態
  • CPUStatus
  • MEMORYSTATUS
  • DiskStatus

列表是通過讀取CSV文件,一旦它的居住人口,我想通過做它返回基於MODELNAME

的不重複的記錄我已經嘗試如下:

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

但是這是不正確的,因爲我最終只有ModelName的列表,沒有別的。

如何獲取Distinct函數以返回列表中的所有其他類成員?

回答

10

LINQ to Objects沒有提供任何要做的「清晰的投影」。你可以按名稱進行分組,然後選取每個組中的第一個元素,但這非常難看。

MoreLINQ提供DistinctBy方法雖然 - 在C#中,你會使用:

var distinct = HWModels.DistinctBy(x => x.ModelName).ToList(); 

想必VB會像

Dim distinct = HWModels.DistinctBy(Function(x) x.ModelName).ToList 

道歉任何語法錯誤,雖然:(

+0

不錯的庫和你的VB.NET語法是正確的 – 2013-04-03 17:50:14

3

這將按首選屬性對您的對象進行分組,然後將選擇每個對象的第一個,刪除重複項。

Dim newlist = HWModels.GroupBy(Function(x) x.ModelName).Select(Function(x) x.First).ToList