私はLinqでグループ化したいオブジェクトのリストを持っています。オブジェクトタイプはGroupRatingです。私はそれらを "Params"プロパティでグループ化したいと思います。Linq - 私自身のタイプと匿名タイプのGroupByの使用
public class GroupRating
{
public long Id { get; set; }
public Parameters Params { get; set; }
}
public class Parameters
{
public int CarrierId { get; set; }
public int CustomerId { get; set; }
}
事は、これが動作することである: (つまり私は、すべてのIDを持つ唯一のグループを取得。)
var myList = new List<GroupRating>();
... blahblah code...
var groupedList = myList.GroupBy(i => new {
CarrierId = i.Params.CarrierId,
CustomerId = i.Params.CustomerId
}, i => i.Id).ToArray();
しかし、これは動作しません: (つまり、私はできるだけ多く取得します。グループにはIDがあるように)
var myList = new List<GroupRating>();
... blahblah code...
var groupedList = myList.GroupBy(i => new Params {
CarrierId = i.Params.CarrierId,
CustomerId = i.Params.CustomerId
}, i => i.Id).ToArray();
なぜか?
おかげ
+1、しかし...構造体におけるA.デフォルトの '' Equals'とGetHashCode'が遠く最適からなので、私も構造体を使用している場合、それらを上書きお勧めします、とB.可能であれば、クラスでさえ、不変性を考慮する価値が常にあります。 –
@JonHanna私はそれに同意します(しかし、 'ValueType'の実装は、構造体が両方とも' int'型の2つの非静的フィールドしか持たない特定の場合にはどれくらい非効率的ですか?)。 –
完全に気違いではないほど効率が悪いと思います。それは反映されていて、かなりうまく反映されています。私はすべて楽しみと利益のためにリフレクションしていますが、あなたが平等のために比較することは決してないでしょうか。 –