web 2.0

Alleen overeenkomstige items selecteren met LINQ

Aangezien ik op het internet (nog) geen goed voorbeeld kon vinden hoe ik onderstaande situatie op kon lossen met LINQ heb ik er zelf maar even een stukje over geschreven wie weet help ik er iemand anders nog mee. 

De situatie is als volgt, ik heb een verzameling items en daaruit wil ik een lijst met bepaalde eigenschappen hebben. Echter dit is na filtering op meerdere waarden van een andere eigenschap en dan wil ik alleen de waardes hebben waarvoor beide filters gelden.

Voorbeeld:

 

* +=======================================+
* +SEGMENT + Periode begin + Periode eind +
* +=======================================+
* + A      + 1-1-2007      + 31-12-2007   + 
* + A      + 1-1-2008      + 31-12-2008   + 
* + A      + 1-1-2009      + 31-12-2008   +
* + B      + 1-1-2008      + 31-12-2008   +
* + B      + 1-1-2009      + 31-12-2009   +
* + B      + 1-1-2010      + 31-12-2010   +
* + C      + 1-1-2008      + 31-12-2008   +
* + C      + 1-1-2009      + 31-12-2009   +
* +=======================================+

Als nu A geselecteerd is, is het resultaat 1-1-2007, 1-1-2008 en 1-1-2009
Als nu B geselecteerd is, is het resultaat 1-1-2008, 1-1-2009 en 1-1-2010
Maar als nu A en B geselecteerd zijn is het resultaat 1-1-2008 en 1-1-2009

In LINQ kan dit nu als volgt
var selection = (from i in items
    group i.Segment by new {i.PeriodeBegin, i.PeriodeEind}
       into igroup 
       where igroup.Distinct().Count() ==
             (from s in items select s.Segment).Distinct().Count()
    select new {
                      igroup .Key.sPeriodeBegin,
                      igroup .Key.PeriodeEind
                    }
      ).Distinct().ToList();

 

 

Wie weet is er iemand anders nog mee geholpen

Reacties zijn gesloten