Linq: groep en selecteer uit de verzameling

Ik heb een les:

public class LevelInfo
    {
        public int Id { get; set; }
        public string HexColor { get; set; }
        public string Caption { get; set; }
        public int MinPrice { get; set; }
    }

Ik heb een verzameling LevelInfo . We hebben bijvoorbeeld de volgende gegevens:

Id     HexColor     Caption     MinPrice
1       color1       name1         10
2       color2       name2         20
3       color2       name3         10
4       color3       name4         10

Ik wil een nieuwe verzameling van LevelInfo groeperen (niet precies, weet niet hoe ik het goed moet zeggen) door HexColor. Voor de bovenstaande gegevens wil ik de volgende verzameling ophalen die 3 records bevat:

Id     HexColor     Caption     MinPrice
1       color1       name1         10
3       color2       name3         10
4       color3       name3         10

We selecteren niet record met Id is gelijk aan 2 omdat we color1 hebben (met Id = 1) en het heeft een min prijs. Hoe kan ik dit doen? Bedankt.

1

1 antwoord

Dus het klinkt alsof je wilt groeperen, bestel binnen de groep op MinPrice, en selecteer dan het eerste element uit elke groep, toch? Als dat klopt, wil je:

var query = from level in levels
            group level by level.HexColor into levels
            select levels.OrderBy(level => level.MinPrice).First();

Als u echter MoreLINQ gebruikt, kunt u vermijden om een ​​complete sortering door MinPrice uit te voeren , gewoon de waarde kiezen met de minimumprijs:

var query = from level in levels
            group level by level.HexColor into levels
            select levels.MinBy(level => level.MinPrice);
4
toegevoegd