Kezdőoldal » Számítástechnika » Programozás » C# DataTable Linq group...

C# DataTable Linq group részhalmazra is?

Figyelt kérdés

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!



2019. máj. 24. 19:19
1 2
 11/14 A kérdező kommentje:

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?

2019. máj. 25. 16:40
 12/14 anonim ***** válasza:

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...

2019. máj. 25. 17:03
Hasznos számodra ez a válasz?
 13/14 A kérdező kommentje:

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!

2019. máj. 25. 17:39
 14/14 anonim ***** válasza:

Hát, pl megnézheted a GroupBy forrását, pl a .net Core-ban:

[link]


Ez egy Lookup osztályt használ, amit itt találsz:

[link]


Ez kb olyan mint egy Dictionary. Ez kéri le a hashkódot.


Amikor én láttam, 0%-os volt a válaszom.

2019. máj. 25. 18:28
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!