Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
BF extended 2022
Avatar
Wayne
Člen
Avatar
Wayne:11.7.2019 19:28

Ahoj, mohl by mě někdo poradit jak lze udělat v LINQu to když se mi nyní vrátí kolekce 2 objektů se stejným Name, tak abych z toho udělal jeden záznam, který však bude obsahovat Parameters jak z prvního záznamu tak i z druhého. Formát je takový to
{
ID:1,
Name : Test,
Parameters
{.
.
.
}},

{
ID:2,
Name : Test,
Parameters
{.
.
.
}},

Předem díky za rady

 
Odpovědět
11.7.2019 19:28
Avatar
Odpovídá na Wayne
Michael Škrášek:11.7.2019 21:59

S LINQ moc neumím, ale podařilo se mi sesmolit tohle:

class Program
{
    static void Main(string[] args)
    {
        List<Data> collection = new List<Data>(new Data[] {
            new Data() {
                name = "test",
                array = new[] { "a", "b" }
            },
            new Data() {
                name = "test",
                array = new[] { "c", "d" }
            },
            new Data() {
                name = "test3",
                array = new[] { "c", "d" }
            }
        });

        List<Data> results = collection.GroupBy(e => e.name).Select(e => new Data() { name = e.Key, array = e.SelectMany(f => f.array).ToArray() }).ToList();
        Console.ReadKey();
    }
}

class Data
{
    public string name;
    public string[] array;
}
Editováno 11.7.2019 22:00
Nahoru Odpovědět
11.7.2019 21:59
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
tesař.tech
Tvůrce
Avatar
tesař.tech:11.7.2019 22:28

Je to zajímavá úloha, pokud někdo přijde s lepším řešením, jsem docela zvědav. Já jsem přišel na toto s GroupBy.

A podle čeho vybereš, který záznam zachováš a který vyhodíš? Já jsem vzal prostě ten první, ostatní se zahodí.

Tvojí noname třídu jsem přejmenoval na Car.

    public class Car
    {
        public int ID { get; set; }
        public List<Parameter> Parameters { get; set; }
        public string Name { get; set; }
    }

    public class Parameter
    {
        public string ParamName { get; set; }
    }

//…

 var grupedListOfCars = listOfCars.GroupBy(x=>x.Name);
var listWithoutSameCars = grupedListOfCars.Select(x =>
            {
                x.First().Parameters = x.SelectMany(c => c.Parameters).ToList();
                return x.First();
           });
 
Nahoru Odpovědět
11.7.2019 22:28
Avatar
tesař.tech
Tvůrce
Avatar
Odpovídá na Michael Škrášek
tesař.tech:11.7.2019 22:35

Malá poznámka: Nevýhoda takového řešení je, že v příkazu budeš muset připisovat každou vlastnost (tím, že tam vytváříš nový objekt). Takže když se změní struktura dat (přidá se k nim nějaká vlastnost), musíš měnit i tenhle kus kódu..

 
Nahoru Odpovědět
11.7.2019 22:35
Avatar
Odpovídá na tesař.tech
Michael Škrášek:11.7.2019 22:45

vlastně máme stejné řešení, akorát já vytvářím nový objekt (horší možnost), ty vezmeš ten první a upravíš ho ...

Nahoru Odpovědět
11.7.2019 22:45
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Wayne
vajkuba1234:11.7.2019 22:55

Klidne pouzij ToLookup extension metodu.
Viz https://docs.microsoft.com/…ble.tolookup?…

Nahoru Odpovědět
11.7.2019 22:55
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
vajkuba1234:12.7.2019 12:59

Blbost, ja spatne cetl zadani...

Nahoru Odpovědět
12.7.2019 12:59
No hope, no future, JUST WAR!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.