Question

J'ai fait beaucoup de recherche à ce qui semble être un simple problème de LINQ, mais je ne peux pas comprendre comment faire saisir un objet d'une collection qui a un minimum spécifié (ou valeur maximale) sans avoir recours à un sorte comme ceci:

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Order By c.age Ascending).ToList.First

Cette structure (code non testé) fonctionne très bien à l'exception que l'ensemble du réseau client doit être triée et placé dans une liste pour le seul but d'extraire la première valeur. Cela ne peut pas être la meilleure façon d'obtenir le minimum!

Notez que je veux l'ensemble du dossier c dans ce cas, pas l'âge de minumum d'un client qui peut être fait comme celui-ci (un exemple typique):

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Select c.age).Min

Ou même

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Select c).Min(Function(x) x.age)

Je ne peux pas pour la vie de me comprendre comment obtenir l'ensemble de l'objet (ou même l'indice) sans avoir recours à ce genre ...

Était-ce utile?

La solution

Encore une fois, le code C #, je ne suis pas sûr que je l'ai eu droit à VB.NET

C #

  Customer youngest = customers.Aggregate((c1, c2) => (c1.age < c2.age) ? c1 : c2);

VB.NET

  dim youngest = customers.Aggregate( Function(ByVal c1, ByVal c2) IF( (c1.age < c2.age) , c1 , c2  ) );

Autres conseils

Il n'y a pas opérateur LINQ régulier qui évitera le tri de l'ensemble IEnumerable. Mais vous n'êtes pas le premier qui a besoin d'une solution. Par exemple départ la réponse de Jason ici (si elle est MaxBy et C #, mais vous aurez une idée): question simple LINQ en C #

Ou MinBy de MoreLinq

Vous êtes presque. Vous devriez trouver que

dim youngest = (From c in customers
                Order By c.age Ascending
                Select c).First

fait ce que vous recherchez. (Je suis un gars C #, pas un gars de VB.NET, donc ma syntaxe peut être un peu.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top