2012-03-10 6 views
4

を使用して(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構文が正しい –

3

これはオブジェクトを優先プロパティでグループ化し、重複を削除して各オブジェクトの最初のオブジェクトを選択します。

Dim newlist = HWModels.GroupBy(Function(x) x.ModelName).Select(Function(x) x.First).ToList 
関連する問題