/ / LINQ položky skupiny. Jedna položka môže byť v niekoľkých skupinách - c #, linq, linq-group

Položky skupiny LINQ. Jedna položka môže byť v niekoľkých skupinách - c #, linq, linq-group

Mám niekoľko položiek, ktoré by som chcelskupiny podľa pridružených kategórií. Položky sú zoskupené podľa kategórií, ktoré sú s nimi spojené - čo je zoznam - takže jedna položka môže byť potenciálne súčasťou viacerých kategórií.

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))};

Používam vyššie uvedený kód a v skutočnosti funguje,ale zaujímalo by ma, či to bude efektívnejší spôsob, pretože táto operácia bude pravdepodobne fungovať pomaly, keď čísla obsahujú tisícky hodnôt.

Prakticky žiadam, aby sa refaktorovanie kódexu stalo efektívnejším.

odpovede:

2 pre odpoveď č. 1

Môžete použiť vstavané zoskupenie LINQschopnosti, ktoré by mali byť rýchlejšie ako vyhľadávanie. Rovnako ako pri akejkoľvek otázke súvisiacej s výkonom, mali by ste naozaj napísať kód na zhromažďovanie metrík výkonu pred tým, ako sa rozhodnete, ako prepísať kód, o ktorom viete, že funguje. Môže sa ukázať, že v prípade objemov, s ktorými budete pracovať, neexistuje žiadny problém s výkonom.

Takže tu je kód, ktorý nie je testovaný, ale niečo podobné by malo fungovať:

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;

Každá skupina obsahuje kľúč a postupnosť hodnôt, ktoré patria tomuto kľúču:

foreach( var group in result )
{
Console.WriteLine( group.Key );
foreach( var value in group )
Console.WriteLine( value );
}