私は匿名型でGroupBy
を使用していました:IEnumerable.GroupBy()で使用される型の要件は何ですか?
var v = list.GroupBy(x => new {x.street, x.houseNumber});
var o = v.Single(x => x.Key.street == "My Street" && x.Key.houseNumber == 42);
それはとてもうまくいきました。
がclass StreetAddress
{
public StreetAddress(string _street,int _houseNumber){...}
public string street{get; set;}
public int houseNumber{get;set;}
}
var v = list.GroupBy(x => new StreetAddress(x.street, x.houseNumber));
var o = v.Single(x => x.Key == new StreetAddress("My Street", 42));
は今、「V」は、すべてのグループ化されていません - 同じKey
値を持つ項目の負荷、およびo
は、任意のオブジェクトと一致しません:私はコンクリートの型にこれを回すことにしました。
StreetAddress
に何を追加する必要があるので、これは匿名タイプと同じように機能しますか?
を実装する方法であるリストはdefined.Itあなたは等価性をチェックするためにrefererenceタイプを使用しているという事実とは何かを持っているかもしれませんがどのように私たちを表示します。 StreetAddressを構造体にしてみてください。 – Glubus
'list'は、2つのプロパティーを持つオブジェクトのコレクション上の別のLINQ呼び出しの結果であり、すべて正常です。構造体を使用することについて興味深いアイデアは、自動的にメンバーワイズ比較を取得?この簡単な場合は、より簡単かもしれません。 –
単純なlinqステートメントを作成するには、StreetAddressクラスにIComparableを継承させ、CompareTo()メソッドを含めることができます。 – jdweng