私はIEnumerableが好きなアイテムがあります関連カテゴリ別にグループ化するアイテムは、リストに関連付けられているカテゴリによってグループ化されているため、1つのアイテムが複数のカテゴリの一部になる可能性があります。
var categories = numbers.SelectMany(x => x.Categories).Distinct();
var query =
from cat in categories
select new {Key = cat,
Values = numbers.Where(n => n.Categories.Contains(cat))};
私は上記のコードを使用し、実際には動作しますが、数値に何千もの値が含まれているときにこの操作が遅くなる可能性が高いため、これを行うより効率的な方法があるかどうかは疑問でした。
私は、コードのリファクタリングをより効率的にすることを要望しています。
回答:
回答№1は2LINQのビルトイングループ化を使用することができます機能は、含まれているルックアップよりも速くなければなりません。ただし、パフォーマンス関連の質問と同様に、実際に動作することがわかっているコードを書き換える方法を決定する前に、パフォーマンスメトリックを収集するコードを作成する必要があります。あなたが作業しているボリュームではパフォーマンス上の問題はまったくないことが判明するかもしれません。
コードはここにありますが、これはテストされていませんが、動作するはずです:
var result = from n in numbers
from c in n.Categories
select new {Key = c, n.Value}
into x group x by x.Key into g
select g;
各グループには、そのキーに属する一連の値とキーが含まれています。
foreach( var group in result )
{
Console.WriteLine( group.Key );
foreach( var value in group )
Console.WriteLine( value );
}