2012-03-30 2 views
1

Ich habe eine Linq-Abfrage, die ein Objekt des Typs IQueryable<ClassX> zurückgibt. Ich möchte dieses Objekt in ein Objekt der Klasse Typ setzen ClassX und erhalte eine Fehlermeldung:Ein Fehler beim Konvertieren vom Typ 'System.Linq.IQueryable <ClassX>' in 'ClassX'

Cannot implicitly convert type 'System.Linq.IQueryable<ClassX>' to 'ClassX' . An explicit conversion exists (are you missing a cast?)

Das ist, was ich versuche zu tun:
GetResult() gibt die IQueryable<ClassX> Objekt.

ClassX x = GetResult(); 

Ich habe versucht, wie ClassX x = (ClassX)(GetResult()); Gießen - aber es hat nicht funktioniert.

+1

Ein 'IQueryable ' stellt eine Abfrage dar, die null, eine oder viele Instanzen des Typs 'T' zurückgeben kann. Daher macht es keinen Sinn, wenn man versucht, es in eine Variable vom Typ "T" zu schreiben - es gibt verschiedene Antworten, wie man damit umgehen soll. –

+0

Danke für die Erklärung! Ich bin neu in Linq .. (+1) – user990635

Antwort

4

Wie Sie wahrscheinlich wissen sind, Ihre LINQ-Abfrage gibt IQueryable<ClassX>. Dies stellt eine Abfrage mit einer Ergebnismenge dar. Es repräsentiert nicht das Objekt im Ergebnis selbst, also kann man es nicht einfach so darstellen.

Wenn Ihre Methode genau ein ClassX Objekt zurückkehren, können Sie .Single() verwenden das Objekt aus der Ergebnismenge zu greifen:

ClassX x = GetResult().SingleOrDefault(); 
2

IQueryable ist "Sammlung" von Objekten, also "Element eines Elements in der Sammlung zuweisen" müssen Sie ein einzelnes Element auswählen.

Je nachdem, was Sie brauchen zunächst Skip, FirstOrDefault würde Sie ein Element aus der IQueryable/IEnumerable holen:

ClassX x = GetResult().FirstOrDefault(); 
0
:

ClassX x = GetResult().Single(); 

Oder .SingleOrDefault() wenn die Ergebnismenge leer sein kann

var temp = GetResult().AsEnumerable().SingleOrDefault(); 
Verwandte Themen