C# DataTable Linq group részhalmazra is?
Olyan oszlop sorait is összevonja, ahol az egyik sor szöveg tartalma a másik részhalmaza.
Van egy ilyen táblám:
DataTable dt = new DataTable();
dt.Columns.Add("felev", typeof(System.String));
dt.Columns.Add("nap", typeof(System.String));
dt.Rows.Add("1,2,3", "hétfő");
dt.Rows.Add("1,2,3,4,5", "hétfő");
dt.Rows.Add("1,2,3,4,5", "hétfő");
dt.Rows.Add("6,7,8,9,10", "hétfő");
dt.Rows.Add("1,2,3", "kedd");
dt.Rows.Add("1,2,3,4,5", "kedd");
dt.Rows.Add("1,2,3", "szerda");
dt.Rows.Add("1,2,3", "vasárnap");
És egy megoldásom rá:
var q = from akt in dt.AsEnumerable()
group akt by new
{
felev = akt.Field<string>("felev"),
nap = akt.Field<string>("nap")
}
into g
select new
{
felev = g.Key.felev,
nap = g.Key.nap
};
Ez csak olyan félévre és napra húz össze, ahol a sorok pontosan egyeznek (összevonja a 2,3 sorokat).
Nekem olyan kimenet kellene, amely összehúzza a tábla 1,2,3 és 5,6 sorát, úgy hogy a hosszabbik szöveget tartalmazó maradjon meg.
Ilyen kimenetre lenne szükségem:
"1,2,3,4,5", "hétfő"
"6,7,8,9,10", "hétfő"
"1,2,3,4,5", "kedd"
"1,2,3", "szerda"
"1,2,3", "vasárnap"
Tudnátok olyan kóddal kiegészíteni a fentieket, amivel a megfelelő kimenet kapható?
Előre is köszönöm a segítségetek!
Köszönöm szépen! Nagyszerűen működik!
A megértéséhez viszont tudnom kellene a group by működését.
Ha jól értelmezem, a groupby meghívja az elemek Equals metódusát (jelen esetben az általad készítettet) akkor, ha már találkozott azonos nappal.
A GetHashCode()-ot mért kell felülírni?
A groupby csoportosítja az objektumokat, belül valószínűleg dictionary-be. A dictionary működéséhet szükség van hashkód számolására és 2 egyenlő objektumnak azononak kell lennie a hashkódjának. Ezért konstans 0-t adok vissza (jobb híján).
Az equalsban pedig az van amit te írtál, akkor egyenlő 2 string, ha egyik része a másiknak.
Egyébként mért lettem lepontozva, ha pont ez ami kell neked?
Nyilán nem szép megoldás, írtam is. De mivel nem árultad el, hogy pontosan mit szeretnél, pl int listát csinálni a számokból ott valami művelet alapján eldönteni, hogy összevonható-e.
Vagy ha mások pontoztak le, mért? A kérdező azt szerette volna amit írtam... Így segítsen az ember itt...
Köszönöm a válaszod!
Ha van irodalmad, ami komolyabban foglalkozik ezzel, azt szívesen fogadom, mert a group by-on belül még nem alkottam hasonlókat, csak a select-ben.
A pontozást én sem értem.
Ennyit látok:
"A válasz 45%-ban hasznosnak tűnik. A válaszíró ...%-ban hasznos válaszokat ad." "Szerinted a válasz hasznos"
Ahogy nézem az #1-es 32%, a #4-es komment 41%-ot kapott, pedig csak a Te megoldásodra nyomtam egyáltalán valamit (zöld like).
Szerintem ne ez határozza meg a jövőben hogy fogsz-e segíteni másoknak. Véletlenszerű komment olvasgatók saját megoldási javaslatuk előállása helyett lehúzzák mások segítségét, ami jelen esetben nem is volt rossz, nem szép dolog.
Mégegyszer köszöm a segítséged!
További 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!