Kann nicht implizit konvertiert Typ 'System.Daten.Linq -.ISingleResult<CustomeProcedureName> to 'int'
Sorry für diese simple Frage .
Ich habe eine Gespeicherte Prozedur, die einen int-Wert , ich bin versucht zu rufen, das sp von mein asp.net linq to sql-Projekt .
int currentRating = db.sproc_GetAverageByPageId(pageId);
Aber ich bekomme diese Fehlermeldung :
Cannot implicitly convert type `'System.Data.Linq.ISingleResult<PsychoDataLayer.sproc_GetAverageByPageId> to 'int' .`
Bearbeiten 1
Die Lösung, die Freunde stillschweigend hat nicht funktioniert . All die Zeit, die es return 0
Für mehr Informationen lege ich meine gespeicherten Prozedur hier :
ALTER procedure [dbo].[sproc_GetAverageByPageId](
@PageId int )
as
select (select sum(score) from votes where pageId = @PageId)/(select count(*) from votes where pageId=@PageId)
- Das tatsächliche Ergebnis ist verpackt in eine ISingleResult.
- Boah, drei gleiche Antworten in den Raum von 1 min. Hoffe, dass Sie funktionieren!
- in der Tat. Hoffentlich, @Mostafa wird Sie erleuchten, uns mit den Ergebnissen 🙂
- Vielen Dank an alle für die Antworten , Aber es gibt 0 zurück, die ganze Zeit, während es funktioniert gut in der Gespeicherten Prozedur
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie prüfen die
ReturnValue
Eigenschaft.Vielleicht auch die folgenden besser funktioniert?
Update:, da Sie Ihre gespeicherte Prozedur gibt eine Ergebnismenge anstatt eines
return
Anweisung die eigentlichen Daten werden als ein element in der enumerable zurückgegebendb.sproc_GetAverageByPageId(pageId)
. Wenn Sie überprüfen dieISingleResult<T>
- Typ, du wirst sehen, dass es erbtIEnumerable<T>
was bedeutet, dass Sie aufzählen können, das Objekt zu erhalten, auf die Daten, wobei jedes element vom TypT
.Da die sproc hat eine
SELECT SUM(*) ...
können wir zählen auf die Ergebnismenge zu enthalten stets eine Zeile. So, der folgende code wird Ihnen die erste (und einzige) element in der Sammlung:Nun, die Art der
sumRow
wirdT
aus der interface-definition, die in Ihrem Fall istPsychoDataLayer.sproc_GetAverageByPageId
. Diese Art hoffentlich enthält eine Eigenschaft mit dem tatsächlichen Wert, den Sie nach sind.Vielleicht können Sie teilen Sie mit uns das layout der
PsychoDataLayer.sproc_GetAverageByPageId
geben?Sieht aus wie bist du eigentlich nach der ReturnValue. Sie müssen möglicherweise werfe es
System.Data.Linq.ISingleResult
wenn nicht schon geschehen, dann warfReturnValue
int.Dies ist tatsächlich wieder eine ISingleResult
Ändern Sie Ihre sp :
eine weitere Sache, die Sie tun können:
SCHREIBEN >>
und danach:
int currentRating = (int)db.sproc_GetAverageByPageId(pageId).count();