Comment sélectionner les N premières lignes d'un Linq GroupBy
espère que vous pourrez m'aider ici.
J'ai une liste de Réservations où je voudrais le mettre sur le dessus 2 rangées de chaque groupe de tour-opérateurs.
voici un exemple de données:
List<Booking> list = new List<Booking>();
list.Add(new Booking() { BookingNo = "31111111", DepDate = new DateTime(2011, 5, 1), TourOperator = "SPI" });
list.Add(new Booking() { BookingNo = "32222222", DepDate = new DateTime(2011, 5, 2), TourOperator = "SPI" });
list.Add(new Booking() { BookingNo = "33333333", DepDate = new DateTime(2011, 5, 3), TourOperator = "SPI" });
list.Add(new Booking() { BookingNo = "34444444", DepDate = new DateTime(2011, 5, 4), TourOperator = "SPI" });
list.Add(new Booking() { BookingNo = "35555555", DepDate = new DateTime(2011, 5, 5), TourOperator = "SPI" });
list.Add(new Booking() { BookingNo = "36666666", DepDate = new DateTime(2011, 5, 6), TourOperator = "SPI" });
list.Add(new Booking() { BookingNo = "11111111", DepDate = new DateTime(2011, 5, 1), TourOperator = "VIN" });
list.Add(new Booking() { BookingNo = "12222222", DepDate = new DateTime(2011, 5, 2), TourOperator = "VIN" });
list.Add(new Booking() { BookingNo = "13333333", DepDate = new DateTime(2011, 5, 3), TourOperator = "VIN" });
list.Add(new Booking() { BookingNo = "14444444", DepDate = new DateTime(2011, 5, 4), TourOperator = "VIN" });
list.Add(new Booking() { BookingNo = "15555555", DepDate = new DateTime(2011, 5, 5), TourOperator = "VIN" });
list.Add(new Booking() { BookingNo = "16666666", DepDate = new DateTime(2011, 5, 6), TourOperator = "VIN" });
list.Add(new Booking() { BookingNo = "17777777", DepDate = new DateTime(2011, 5, 7), TourOperator = "VIN" });
J'ai cette Linq, mais il ne me donne la Réservation d'abord dans chaque groupe:
List<Booking> yetAnotherList = list.GroupBy(row => row.TourOperator)
.Select(g => g.OrderBy(row => row.DepDate).First()).ToList();
Les données que j'espérais était quelque chose comme ceci:
31111111, 2011-05-01, SPI
32222222, 2011-05-02, SPI
11111111, 2011-05-01, VIN
12222222, 2011-05-02, VIN
Grâce.
OriginalL'auteur M Raymaker | 2011-04-24
Vous devez vous connecter pour publier un commentaire.
Remplacer
First()
avecTake(2)
et l'utilisationSelectMany()
:Mise à jour: Oublié le
SelectMany
la première fois. Vous voulez aplatir le résultat (ce quiSelectMany
n'), sinon vous obtiendrez une liste deIEnumerables
.JensRud, essayez d'utiliser de la var et de voir dans le debug de ce type a yetAnotherList.
Wow merci Chris, la combinaison de SelectMany et Prendre était juste ce dont j'avais besoin! Les résultats nécessaires aplatissement comme vous l'avez souligné.
OriginalL'auteur ChrisWue
Essayez d'utiliser
var
et remplacerFirst()
avecTake(2)
:Merci pour votre réponse Joolio, seulement, il me donne deux listes imbriquées, et j'ai besoin de la raison d'être aplatie. SelectMany fait ce que j'ai découvert à partir de Chris réponse.
OriginalL'auteur Sergey Metlov