So wählen Sie ein einzelnes Objekt mit Linq in vb.net
Ich habe eine Menge suchen, um was zu sein scheint eine einfache LINQ-problem, aber ich kann nicht herausfinden, wie zu tun, schnappen Sie sich ein Objekt aus einer Sammlung, die ein bestimmtes minimum (oder max-Wert), ohne Rückgriff auf eine Art wie dieses:
dim customers= GetCustomers()
dim youngest = (From c in customers
Order By c.age Ascending).ToList.First
Diesem (ungetesteten code) Struktur funktioniert gut, mit der Ausnahme, dass die gesamte Kunden-array muss sortiert und in einer Liste für den einzigen Zweck des Extrahierens der erste Wert. Das kann nicht der beste Weg, um das minimum!
Beachten Sie, dass ich will, dass die ganze c-Aufzeichnung in diesem Fall, nicht das minimale Alter des Kunden, die getan werden können, wie dies (ein typisches Beispiel):
dim customers= GetCustomers()
dim youngest = (From c in customers
Select c.age).Min
Oder sogar
dim customers= GetCustomers()
dim youngest = (From c in customers
Select c).Min(Function(x) x.age)
Ich kann nicht für das Leben von mir herauszufinden, wie man das ganze Objekt (oder auch index), ohne auf die Art...
InformationsquelleAutor Hucker | 2011-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wieder C# code, ich nicht sicher bin ob ich es richtig in VB.NET
C#
VB.NET
Ich landete mit Aggregat, und es scheint ziemlich sauber. Danke.
Ich nehme an, Ihre erste Frage müssen Sie akzeptieren einer Antwort, dass dein problem gelöst.
InformationsquelleAutor Sanjeevakumar Hiremath
Gibt es keinen solchen operator in regelmäßigen LINQ, zu vermeiden Sortierung der gesamten
IEnumerable
. Aber du bist nicht der erste, der eine Lösung braucht. Zum Beispiel check out Jason ' s Antwort hier (obwohl esMaxBy
und C#, aber Sie bekommen die Idee): Einfache LINQ-Frage in C#Oder
MinBy
aus MoreLinqja, einverstanden. Sieht ein wenig anspruchsvoller als die meisten Abfragen mit
Aggregate
, aber noch ok. Danke für die IdeeInformationsquelleAutor Snowbear
Sind Sie fast da. Sollten Sie feststellen, dass
tut, was Sie suchen. (Ich bin ein C# - Typ, kein VB.NET Kerl, so meine syntax ist möglicherweise ein bisschen off.)
Ich verstehe, dass dies eine implizite Art. Ich hatte deine Frage Lesen, um zu bedeuten, dass Sie versuchen zu vermeiden, die ToList, nicht, dass Sie waren auf der Suche zu vermeiden, die Art insgesamt. Andere Antworten geben O(N) Verhalten, so dass es kein Vorteil für mich aktualisieren meine.
Es gibt eigentlich keinen Grund anzunehmen order by sortiert die Liste zunächst. Die erste und einzige Aufruf von MoveNext() könnte möglicherweise nur wieder das kleinste Element eher als Art die ganze Liste und das wäre O(N). Dies war nicht möglich mit der original version, die hatte ein ToList. In lazy eval Sprachen wie Haskell es nicht, Sortieren Sie die Liste zunächst-und das wäre O(N). Leider, auch in .NET 4.0, es scheint, es wird QSORT ersten machen Menschen spielen mit LINQ eher als deklarative
InformationsquelleAutor DocMax