C# DataTable a group-olni kívánt oszlopok nevei listában vannak. Hogyan lehet megvalósítani?
Feladat egy olyan groupby-os lekérdezésre, ahol dinamikusan tudnám megadni a csoportosításban résztvevő oszlopneveket. Ebben kérem segítségetek!
Egy összeállított példa:
...
//Példa groupolni kívánt oszlopnevekre (ez a program használata során változik):
List<string> cols = new List<string>() { "cElso", "cHarmadik" };
PéldaProgi(cols);
...
public void PéldaProgi(List<string> cols) {
DataTable table = new DataTable();
table.Columns.Add("cElso", typeof(System.String));
table.Columns.Add("cMasodik", typeof(System.String));
table.Columns.Add("cHarmadik", typeof(System.String));
//Egy statikus megoldás. Itt nem tudom a group-nál a listát használni az oszlopnevek megadására:
var q = from elem in table
group elem by new { Elso = elem["cElso"], Harmadik = elem["cHarmadik"] } into g
select new { Masodik = g.First().Field<string>("cMasodik") };
}
Csak egy jo tanacs a linq-hoz: inkabb a method syntaxot hasznald a query syntax helyett. Szerintem sokkal atlathatobb es ha mivel meg lathatoan uj vagy, ezert legalabb nem fogod keverni az sql-el.
Ha jol ertem valami olyasmit akarsz, hogy a csoportositasban ne egy statikus select eredmenye legyen, igaz? Ehhez eleg magat a csoportot selectelned.
peldaIEnumerable.GroupBy(p => p.GroupByProperty).Select(g => new { g.Key, GroupWithAllProperty = g });
Aztan ha hasznalni is akarod az adatot es nincsen benne rengeteg adat, akkor a vegere meg nyomsz egy .ToList()-et.
Erre gondoltal? A fenti leiras alapjan nem voot eleg egyerteomu, hogy pontosan mit szeretnel.
#1 Köszönöm válaszod!
Nemcsak a select-ben lévő, hanem a group-ban megadott csoportosítást is dinamikussá szeretném tenni (oszlopok száma / neve változhat).
Fenti példámban, az oszlopok neveit tartalmazó lista tartalma változhat menet közben.
Elnézést a következő rossz példámért, de így lehet könnyebben látható mit is szeretnék:
var q = from elem in table.AsEnuberable()
group elem by elem[cols] //? listában megadott oszlopnevek alapján csoportosítson
into g
select new { Key = g.Key, AllProperty = g };
Találtam rá egy megoldást, ha van egyszerűbb megoldás, szívesen fogadom:
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!