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
 1/14 anonim ***** válasza:
32%
String.Contains ?
2019. máj. 24. 22:01
Hasznos számodra ez a válasz?
 2/14 A kérdező kommentje:

Készítettem egy fapados verziót, ami a fentiek eredményéből dolgozik.

Jobb lenne, ha már a group-olás közben meg lehetne oldani.


int i = 0;

List<int> rowIndexes = new List<int>();

DataTable dtOutput = dt.Clone();

while (i < q.Count())

{

--if (!rowIndexes.Contains(i))

--{

----var q2 = from akt in q

------where q.ToList()[i].nap == akt.nap

------&& (q.ToList()[i].felev.Contains(akt.felev)

------|| akt.felev.Contains(q.ToList()[i].felev)) select akt;


----List<int> indexOfRows = q2.Select(x => q.ToList().IndexOf(x)).ToList();

----rowIndexes.AddRange(indexOfRows);

----var q3Row = q2.OrderByDescending(x => x.felev.Length).First();

----dtOutput.Rows.Add(q3Row.felev, q3Row.nap);

--}

--i++;

}

2019. máj. 24. 22:48
 3/14 A kérdező kommentje:

Az előző hozzászólásomban lévő kódban, megkeresi a program a fenti q group-olt eredményből azokat a sorokat, amelyeknél megegyezik a "nap" és a "felev"-nél a részhalmazhoz köthetőek. Ezeket kigyűjti egy újabb táblába.


Szeretném ezt egyszerűbbre venni, mert kb írtam egy group metódust a megoldásomban.

2019. máj. 24. 22:57
 4/14 anonim ***** válasza:
41%
Engem mondjuk addig érdekelt a feladat, amíg megláttam, hogy számhalmazt stringként tárolsz/kezelsz. Horror.
2019. máj. 25. 00:27
Hasznos számodra ez a válasz?
 5/14 anonim ***** válasza:

Ezek a számok mit jelentenek?


Mit kéne csinálni a

"1,2,3,4", "hétfő"

"1,2,3,5", "hétfő"

esetben?


Vagy a

"1,2,3", "hétfő"

"1,2,30", "hétfő"

esetben?

2019. máj. 25. 00:50
Hasznos számodra ez a válasz?
 6/14 A kérdező kommentje:

#4 Ez két szöveg formátumú oszlopa annak az adattáblának amit a programom inputként kap.


#5 Az "1,2,3" "hétfő", "1,2,3,4,5" "hétfő" és "1,2,3,4,5" "hétfő" sorokat össze kellene vonnia ezzé: "1,2,3,4,5" "hétfő".

Ugyanígy az "1,2,3" "kedd" és "1,2,3,4,5" "kedd" sorokat is ezzé: "1,2,3,4,5" "kedd".

2019. máj. 25. 01:16
 7/14 anonim ***** válasza:
Magyarul te az összefésülés tételét szeretnéd használni. Remélem, hogy tudtam segíteni.
2019. máj. 25. 01:21
Hasznos számodra ez a válasz?
 8/14 anonim ***** válasza:

A kérdésemre nem válaszoltál. Az általam megadott eseteket össze kell vonni vagy sem? Mi a logika, mert amit eddig leírtál annak semmi értelme.


Egyszerű kérdést tettem fel, amire a válasz gyakorlatilag igen/nem (összevonni/nem összevonni) Légyszíves arra válaszolj.


Vagy írd le, ha hülyeség a példa és nem lehet olyan, hogy 1,2,3,5 valami miatt.... de akkor indokold meg, hogy ez a felsorolás hülyeség, mert...?

2019. máj. 25. 09:48
Hasznos számodra ez a válasz?
 9/14 A kérdező kommentje:

#7 Köszönöm! Megnézem, hogyan tudom beletenni a lekérdezésbe.


#8 Elnézést, nem olvastam figyelmesen, akkor leírom.

Hasonló átfedés mint ami a példádban szerepel, nem fog előfordulni, így azzal nem kell foglalkozni.

2019. máj. 25. 10:50
 10/14 anonim ***** válasza:
48%

            var q = from akt in dt.AsEnumerable()

                group akt by new

                {

                    felev = new CustomString(akt.Field<string>("felev")),

                    nap = akt.Field<string>("nap")

                }

                into g

                select new

                {

                    felev = g.Select(x => x.Field<string>("felev")).OrderByDescending(x => x.Length).First(),

                    nap = g.Key.nap

                };


Ahol:

        class CustomString

        {

            public string Str { get; }


            public CustomString(string str)

            {

                Str = str;

            }


            public override int GetHashCode()

            {

                return 0;

            }


            public override bool Equals(object obj)

            {

                var other = (CustomString) obj;

                return Str.Contains(other.Str) || other.Str.Contains(Str);

            }

        }


Persze ez nem szép, de azt csinálja amit szeretnél, ha jól értem. A kérdésben részhalmaz szerepel, itt errl nicns szó. Azt vizsgálja, hogy az egyik string részstrinhje-e a másiknak. Ahogy te akartad.

2019. máj. 25. 12:35
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!