を動作しません。 Distinct()
の何が問題なのですか?は、私は次のLINQの式を持って
答えて
Distinct
はNameValueGuid
のEquals
メソッドを使用して重複を検索します。 Equals
を上書きしない場合は、参照をチェックします。
匿名型を使用して、Equalsを上書きしないように追加の手順を追加できます。匿名型は自動的にEqualsとGetHashCodeをオーバーライドし、各メンバを比較します。匿名型でdistinctを実行し、それをあなたのクラスに投影することで問題は解決します。
from firstEntry in FirstEntries
select new
{
Name = firstEntry.Agent,
Value = firstEntry.AgentId
}).Distinct().Select(x => new NameValueGuid
{
Name = x.Name,
Value = x.Value
});
あなたはNameValueGuid
にGetHashCode
とEquals
の両方の実装を供給していない可能性があります。
また、それが不可能な場合はDistinct
のコールにIEqualityComparer<NameValueGuid>
のインスタンスを渡すことができます。
参照:http://msdn.microsoft.com/en-us/library/system.linq.enumerable.distinct.aspx
良い説明ですが、別の解決策があります:匿名型を使用しています(* Cadrell0 *の回答を参照してください) –
+1、 'GetHashCode'を無効にする必要があります。それをオーバーライドした後、 'Distinct'はまず' GetHashCode'を呼び出して 'Equals'を呼び出す必要があるかどうかを判断します。 – DCShannon
あなたはDistinct
がName
とValue
プロパティを持つクラスのコンテキストで何を意味するかを定義する必要があります。 MSDNを参照してください。
比較対象を提供するDistinctのオーバーロードを試してください。例えば
:あなたはNameValueGuidのコード定義へのアクセス権を持っている場合
AgentsFilter = new BindableCollection<NameValueGuid>((from firstEntry in FirstEntries
select new NameValueGuid
{
Name = firstEntry.Agent,
Value = firstEntry.AgentId
})
.Distinct((nvg) => nvg.Value)
);
あるいは、あなたがクラスに応じてGetHashCode
とEquals
を上書きすることができます。繰り返しますが、MSDN
select new
{
Name = firstEntry.Agent,
Value = firstEntry.AgentId
})
.Distinct()
.Select(x => new NameValueGuid
{
Name = x.Name,
Value = x.Value
});
- 1. 私は、次のSQLを持ってLINQ
- 2. 私は次の文を持ってLINQ
- 3. LINQのXML私は次のXML持っ
- 4. 私はWebAPIのコントローラで、次のLINQを持つLINQ式
- 5. は、私は次のクエリを持ってLINQ
- 6. LINQクエリは、私は次のクエリを持って
- 7. LINQは、私は、次のDBを持って
- 8. LINQは、私はDataTableの次を持っているデータテーブル
- 9. は、私は次のコードを持ってLINQ
- 10. は、私は、次のLINQコードを持ってIOrderedQueryableエラー
- 11. LINQは、私は、次の抽象化を持ってNullReferencesException
- 12. C#の - 私は、次のXML構造を持ってLINQの
- 13. 私は2つのLINQ持ってLINQ
- 14. LINQの私は、次のクエリを持って
- 15. 、私は次のコードを持ってLINQ [New]を選択
- 16. LINQはいないとレコードが、私は、次のLINQクエリを持って
- 17. は、私は次の形式のシェルコマンドを持って
- 18. XPath式 - 私は次のXPath式持って
- 19. LINQのOrderBy句 - 私は、次のLINQのOrderBy句を持って常にトップ
- 20. は、私は私の方法の一つで、次のコードを持ってLINQクエリ
- 21. Laravel - 要求は、私は次の形式を持っている
- 22. は、私は次の形式を持っている
- 23. は、私は次のテキスト形式を持って試合
- 24. は、私は次の形式を持っている
- 25. は、私は次の式を持っている
- 26. は、私は次の形式を持っている
- 27. 私は次の式を持っているテキストフィールドを持っている
- 28. 私は、次の形式のデータを持っている
- 29. 私は、次のxml形式を持っているのXQuery
- 30. 私はこのLINQクエリを持って
回答いただきありがとうございました。 –
「Distinctは重複を見つけるためにEqualsメソッドを使用します。 Equalsをオーバーライドしないと、参照をチェックします。 –