4 votes

LINQ - filtrer les doublons avec une condition

Je développe une application .NET dans laquelle je dois filtrer des données provenant de SQL Server 2008 en fonction d'une condition. Ma structure de données ressemble à ceci :

enter image description here

Les résultats doivent être regroupés et triés par clé. Par défaut, la ligne dont la révision est nulle doit être renvoyée pour chaque clé, mais si le paramètre revisionParameter est défini, la ligne avec le numéro de révision correspondant doit être renvoyée. Si le paramètre est deux, le résultat doit être :

abc     2     FALSE
def    null   TRUE
ghj     2     FALSE
klm    null   TRUE

Comment puis-je réaliser cela avec LINQ ? Merci de votre compréhension.

EDIT : Réponse à lazyberezovsky : Votre expression LINQ réécrite en lambda :

partial void RuleEntriesByUserSaveId_PreprocessQuery(int? UserSaveId, ref IQueryable<RuleEntry> query)
{
query = query.Where(re => re.Revision == null || re.Revision == value)
             .GroupBy(re => re.Key)
             .Select(g => g.FirstOrDefault(x => x.Revision != null) ?? g.First());
}

3voto

Sergey Berezovskiy Points 102044
from r in Table
where !r.Revision.HasValue || r.Revision.Value == value
group r by r.Key into g
select g.FirstOrDefault(x => x.Revision.HasValue) ?? g.First()

Cela permet de sélectionner les enregistrements dont la révision est égale à null ou à la valeur spécifiée. Après le regroupement par clé, nous essayons de trouver tout enregistrement dont la révision a une valeur (cette valeur est égale au filtre). S'il n'y a pas d'enregistrement avec une révision, nous prenons simplement le premier enregistrement du groupe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X