J'ai un objet Personne avec une propriété Nullable DateOfBirth. Existe-t-il un moyen d'utiliser LINQ pour interroger une liste d'objets Personne afin de trouver celui dont la valeur DateOfBirth est la plus ancienne/la plus petite ?
Voici ce avec quoi j'ai commencé :
var firstBornDate = People.Min(p => p.DateOfBirth.GetValueOrDefault(DateTime.MaxValue));
Les valeurs DateOfBirth nulles sont définies par DateTime.MaxValue afin de les exclure de la prise en compte de Min (en supposant qu'au moins une d'entre elles ait une date de naissance spécifiée).
Mais tout ce que cela fait pour moi est de définir firstBornDate à une valeur DateTime. Ce que j'aimerais obtenir, c'est l'objet Personne qui correspond à cette valeur. Dois-je écrire une deuxième requête comme ceci :
var firstBorn = People.Single(p=> (p.DateOfBirth ?? DateTime.MaxValue) == firstBornDate);
Ou existe-t-il un moyen plus simple de le faire ?
26 votes
Juste un commentaire sur votre exemple : Vous ne devriez probablement pas utiliser Single ici. Il y aurait une exception si deux personnes avaient la même date de naissance.
1 votes
Voir aussi le quasi-duplicata stackoverflow.com/questions/2736236/ qui contient quelques exemples concis.
4 votes
Quelle fonctionnalité simple et utile. MinBy devrait faire partie de la bibliothèque standard. Nous devrions soumettre une demande de téléchargement à Microsoft github.com/dotnet/corefx
2 votes
Cela semble exister aujourd'hui, il suffit de fournir une fonction pour choisir la propriété :
a.Min(x => x.foo);
5 votes
Pour démontrer le problème : en Python,
max("find a word of maximal length in this sentence".split(), key=len)
renvoie la chaîne "phrase". En C#"find a word of maximal length in this sentence".Split().Max(word => word.Length)
calcule que 8 est la plus grande longueur d'un mot, mais ne vous dit pas quelle est la plus grande longueur d'un mot. est .