Avatar billede KOH Novice
20. januar 2016 - 11:47 Der er 4 kommentarer

LINQ - find alle unikke guid

Hej

hvordan får jeg en liste af unikke guid baseret på udtræk fra class a?
det er et simplificeret eksempel, men class b inderholder en list af guid, jeg vil så gerne finde alle de unikke guid som class c inderholder i class a? den endelige liste af quid's skal så matches med en liste af parametre.

class a
{
  list<class b>
}

class b
{
  list<class c>
}

class c
{
  Guid myGuid {get; set;}
}
Avatar billede arne_v Ekspert
20. januar 2016 - 19:03 #1
Til inspiration:


using System;
using System.Collections.Generic;
using System.Linq;

namespace E
{
    public class A
    {
        public List<B> AllB { get; set; }
    }
    public class B
    {
        public List<C> AllC { get; set; }
    }
    public class C
    {
        public int V { get; set; }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            A o = new A { AllB = new List<B> {
                    new B { AllC = new List<C> { new C { V = 1 }, new C { V = 2 } } },
                    new B { AllC = new List<C> { new C { V = 2 }, new C { V = 3 } } } } };
            List<int> res = o.AllB.Aggregate(new List<C>(), (aggr,b) => { aggr.AddRange(b.AllC); return aggr; }).Select(c => c.V).Distinct().ToList();
            foreach(int v in res)
            {
                Console.WriteLine(v);
            }
            Console.ReadKey();
        }
    }
}
Avatar billede KOH Novice
20. januar 2016 - 19:37 #2
Super, det må jeg prøve at få testet - smid et svar
Avatar billede arne_v Ekspert
20. januar 2016 - 19:43 #3
svar

(vent med at acceptere indtil du ved om det virker)
Avatar billede arne_v Ekspert
20. januar 2016 - 19:47 #4
Er lige blevet enig med mig selv om at:

List<int> res = o.AllB.Aggregate(new List<C>(), (aggr,b) => { aggr.AddRange(b.AllC); return aggr; }).Select(c => c.V).Distinct().ToList();

nok boer erstattes med:

List<int> res = o.AllB.Aggregate(new List<C>(), (aggr,b) => aggr.Concat(b.AllC).ToList()).Select(c => c.V).Distinct().ToList();

da koden er kortere og mere laeselig (omend lidt mindre effektiv).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester