konvertieren IQueryable<int> zu <int>
Ich will, mein Preis Niveau in der Datenbank zu vergleichen, mit der ein integer-Zahl. Aber Es ist error : Operator '==' kann nicht angewendet werden auf Operanden vom Typ " System.Linq -.IQueryable' und 'int'.
Das ist mein code :
if (Request.IsAuthenticated){
CustomerModels cm = new CustomerModels();
string userName = Page.User.Identity.Name;
var list_pricelevel = from c in cm.DataContext.Customers
where c.WebAccount == userName
select c.PriceLevel;
if (list_pricelevel == 3) {
Response.Write("Welcome");
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist per definition nicht eine
int
weil mehr als eine Zeile zurückgegeben werden kann.Ich keine SQL-syntax verwenden (nur lambda), aber am Ende wollen Sie das äquivalent eines
.FirstOrDefault
oderSingle
oderFirst
. Grundsätzlich nehmen die erste Zeile.list_pricelevel
Wert, den Sie bekommen würde, mehrere von Ihnen.ersetzen:
mit:
wie man hier sehen kann: http://msdn.microsoft.com/en-us/library/bb291976.aspx, wenn Sie sicher sind, dass es eine Folge oder verwenden Sie
FirstOrDefault
...wenn man das Ergebnis von LinQ-Ausdruck haben Sie immer die Liste der Ergebnismenge.
Also in Ihrem code, wenn Sie Abfragen, wie folgt :
var list_pricelevel = from c in cm.DataContext.Customers
where c.WebAccount == userName
select c.PriceLevel;
Den list_pricelevel werden in form von Liste ie IQueryable Liste,
so haben Sie, um nur ein element zu prüfen, mit einem element
so verwenden Sie den folgenden code :
Hier ist mein Vorschlag:
Diese steigen kann eine NullReferenceException-Ausnahme in Fall gibt es kein Element in Kunden befriedigend
where c.WebAccount == userName
.Erklärung:
list_pricelevel ist ein IEnumerable der Elemente, befriedigend Ihre where-Klausel.
Müssen Sie get das erste Element aus Ihrer Sammlung.
Das ist die Schönheit von Linq, dass jede Abfrage liefert ein IQueryable, so dass Sie können verschieben sich die endgültige Ergebnis, bis Sie haben wirklich beschlossen, was Sie wollen. Auf der anderen Wort, das Sie ausführen können, eine Abfrage über eine weitere Anfrage 🙂
So, um die realen Daten aus einer Abfrage, die Sie sollten ausführen einen Befehl über die es tatsächlich gibt, was Sie wollen.
In Ihrem Fall, da Sie erwarten, dass Ihre Abfrage nur einen Wert und keine Methoden wie "FirstOrDefault","Single" oder "Erste" wird den trick tun