2009-05-23 6 views

答えて

4

私はあなたがこのような何かをしたいと考えている:匿名型は、単にLINQの中で仕事をする必要があります匿名型のすべてのフィールドのデフォルトの等号する比較器を使用することができますよう

var result = from i in info 
      group i by new { OrderId = i.OrderId, City = i.City } into g 
      select new { OrderId = g.Key, Infos = g }; 

は、キーを作成しますほとんどの状況。

+1

ことができますので、このような匿名型を使用してコンパイルしたアプリにリフレクターを開くためにも非常に便利です:あなたの最終的な結果セットを受注する受注コードが必要な場合は、次の操作を行う必要があります上記の理由が理解できる。あなたがEquals()、GetHashCode()などを実装する方法を非匿名の型を作成する必要があるときには、悪いガイドラインでもありません。 – Josh

+0

@Josh:それはおそらく良い推薦です。そうだとしたら、ユーザー定義型の既定の比較対象を使用するよりも、しばしば(そして必要な)多くのことを行うことができます。 – Noldorin

3

Noldorinの回答のフォローアップとして、匿名型のフィールド名を、設定しているフィールドと一致するときに省略することができます。

例:Noldorinさんとジョシュアインシュタインの答えに

var result = from i in info 
      group i by new { i.OrderId, i.City } into g 
      select new { OrderId = g.Key, Infos = g }; 
2

別のフォローアップ...受注コードは、この場合、2つのプロパティを持つ新しいオブジェクトで全体のキー...に受注がかかりますと市。

var result = from i in info 
      group i by new { i.OrderId, i.City } into g 
      select new { OrderId = g.Key.OrderId, Infos = g };