4

Lists の要素でa をソートしたいと思いIGroupingます。

それだけです。リストは理想的には同じでなければなりません。私は新しいリストで妥協しますが、その場合、要素はコピー (ただし浅い) ではなく、まったく同じ元のオブジェクトである必要があり、匿名オブジェクトであってはなりません。

具体的には:多くのプロパティを持つエンティティと、このタイプのオブジェクトのリストがあります。(1)オブジェクトを特定のプロパティ (名前、アドレスなど) でグループ化し、(2)各グループ内の要素の数をカウントします。最後に、(3)大きなグループの一部である要素を最初に配置することにより、これらのカウントに基づいてリストを並べ替えます。

注:私たちの主な問題は、グループの要素で元のオブジェクトへの参照を保持する方法が見つからないように見えることです。実際、Linq クエリで選択できるのはグループ化キー (またはキーのプロパティ) だけであり、それ以外は によって公開されませんIGrouping。グループ要素をリストの要素に関連付ける方法もわかりません。データを見ないとわかりません (その場合でも、グループ化キーに追加できない主キーが必要です)。そもそもグループ化の目的に反することになります)。

4

3 に答える 3

2

.NET では、オブジェクトを複製する操作はほとんどありません。深くも浅くもありません。また、LINQ は、処理する要素を複製しません。したがって、単純な LINQ クエリが機能します。

var oldList = ...;
var newList = (from x in oldList
               group x by something into g
               orderby g.Count()
               from x in g //flatten the groups
               select x).ToList();

このコードは、元のオブジェクトへの参照をコピーします。そうでないと信じるなら、あなたはおそらくあなたが見ているものを誤解しています.

于 2013-10-22T12:25:35.890 に答える