20 Stimmen

c# LINQ: wie man ein einzelnes Ergebnis abruft

Ich bin neu in Linq,

Was ist der einfachste Weg, um ein einzelnes Ergebnis mit Linq abzurufen?

Beispiel, meine Abfrage

var query =
     from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target;

Es sollte nur ein einzelnes Feld mit einem doppelten Wert zurückgegeben werden. Wie ziehe ich es aus der Abfrage heraus? In der Vergangenheit hatte ich ExecuteScalar verwendet. Wie mache ich das mit Linq? Ich würde gerne den Datentyp beibehalten

UPDATE:

So sieht es jetzt aus. Das Problem ist, dass die Testabfrage, die ich hier ausführe, 4 anstelle von 3,75 zurückgibt

var query =
                (from a in db.LUT_ProductInfos
                 where a.flavor == "Classic Coke" && a.Container == "Can"
                 select new { a.co2High }).Single();

            double MyVar = query.co2High.Value;

30voto

Tom Gullen Punkte 59095

Ich denke, Sie meinen einen Wert zurückgeben, nicht einen Datensatz? Sie müssten Folgendes tun select new {} wie folgt:

var query =
     from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select new { c.co2Target };

Wenn Sie nur einen einzigen Datensatz abrufen möchten, können Sie auch das tun:

var query =
     (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select new { c.co2Target }).Single();

Der Abruf würde wie folgt erfolgen:

var query =
         (from c in db.productInfo
         where c.flavor == "Classic Coke" && c.container == "Can"
         select new { c.co2Target }).Single();

double MyVar = query.co2Target;

16voto

BenCr Punkte 5821

Verwenden Sie die .Single() o .SingleOrDefault() Erweiterungsmethoden.

var query =
     (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).Single();

12voto

SirViver Punkte 2401

Durch die Verwendung von First() o FirstOrDefault()

var query =
    (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).FirstOrDefault();

Verwenden Sie nur Single() o SingleOrDefault() wenn Sie wissen, dass es nur ein Ergebnis gibt, oder wenn Sie fehlschlagen wollen, wenn es mehrere Ergebnisse gibt.

6voto

Thorarin Punkte 45433

Sie können die Single Erweiterungsmethode:

var result =
     (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).Single();

Andere verwandte Erweiterungsmethoden sind SingleOrDefault , First y FirstOrDefault .

Der Unterschied zwischen Single und First besteht darin, dass Single eine Ausnahme auslöst, wenn die Abfrage zu mehr als einem Ergebnis führt. Die OrDefault Variationen werden zurückgegeben null wenn keine Ergebnisse von der Abfrage zurückgegeben wurden, während Single und First eine Ausnahme auslösen, wenn kein Ergebnis vorhanden ist.

Wenn Sie Entity Framework 3.5 verwenden, unterstützt es nicht Single Sie müssen also Folgendes verwenden First .

Eine andere Sache, die erwähnenswert ist, ist, dass Ihr ursprünglicher Code zu einer IQueryable<T> Das bedeutet, dass die Abfrage erst dann ausgeführt wird, wenn Sie das Ergebnis auswerten. Wenn Sie eine dieser Erweiterungsmethoden verwenden, wird die Abfrage sofort ausgeführt.

4voto

Pranay Rana Punkte 170480

Msdn : SingleOrDefault

Benutzen Sie Single() o SingleOrDefault() Methode, um das Ergebnis zu erhalten

Siehe auch : Standard-Erweiterungsmethoden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X