2016-12-05 6 views
1

を得るために、私はこのようになりますデータテーブルを持っている(いない私のテーブルにデータを変更することはできません)LINQの個別のプロパティに

Code  Version Description 
AAA  0.0.0.0 Test of AAA 
AAA  0.0.0.1 Test of AAA 
BBB  0.0.0.0 Test of BBB 
CCC  0.0.0.0 Test of CCC 
CCC  0.0.0.1 Test of CCC 

私は唯一のユニークな「コード」の値のリストを返したいです。
だから私の望ましい結果は次のようになります。

AAA Test of AAA 
BBB Test of BBB 
CCC Test of CCC 

私は比較演算子クラスを作成しました:それはまだ戻っているが

var mapCodes = (from mtc in GetAllData() select mtc) 
        .Distinct(new MyComparer()) 
        .ToList(); 

public class MyComparer : IEqualityComparer<MY_DATA_TABLE> 
{ 
    public bool Equals(MY_DATA_TABLE x, MY_DATA_TABLE y) 
    { 
     return x.CODE == y.CODE; 
    } 

    public int GetHashCode(MY_DATA_TABLE obj) 
    { 
     return obj.GetHashCode(); 
    } 
} 

と私のコードでは、私が持っているの内容全体が戻ってくる。

プロパティ別のリストを取得するにはどうすればよいですか?あなたがMoreLinq's DistinctBy

var mapCodes = (from mtc in GetAllData() 
       select mtc).DistinctBy(x=>x.Code).ToList(); 

それとも使用することができます

+3

Equals()とwhioleオブジェクト内のコードだけをチェックします問題はありますが、GetHashCodeの実装が間違っています。オブジェクトが "等価"なので、HashCodesは 'obj.Code.GetHashCode()'を返すようにしなければなりません。 – BradleyDotNET

+2

*プロパティによって異なるリストを得る方法は?** ** ** GetHashCodeを正しく実装すること。 –

+0

あなたはおそらくMoreLinqからDistinctByエクステンションを望むでしょう –

答えて

1
あなた GetHashCode()機能を書き換え

public int GetHashCode(MY_DATA_TABLE obj) 
{ 
    return obj.CODE.GetHashCode(); 
} 

ルールが等しく、GetHashCode()の両方が同じプロパティをチェックする必要があること、である、あなたはGetHashCode()にUnlikley

+0

それでした。私は不動産をチェックしていなかったことを知らなかった。 – PrivateJoker

2

var mapCodes = GetAllData().DistinctBy(x=>x.Code).ToList(); 

かをコメントで述べたように、あなたは、GetHashCodeメソッドを修正することができ

5

別のオプションは、グループを行うことですVersionが問題でなければ、各グループの最初の値を取る。

var mapCodes = (from mtc in GetAllData() 
       group mtc by mtc.Code into grp 
       select grp.First()).ToList(); 
+0

これは当然正しい答えです – Tuco

関連する問題