Linq-Abfrage mit Nullable-Summe
from i in Db.Items
select new VotedItem
{
ItemId = i.ItemId,
Points = (from v in Db.Votes
where b.ItemId == v.ItemId
select v.Points).Sum()
}
Habe ich diese Abfrage, aber es schlägt fehl, wenn keine Stimmen gefunden werden, mit der Ausnahme:
The null value cannot be assigned to a member with type System.Int32 which is a non-nullable value type.
Ich davon ausgehen, dass seine, weil die Summe gibt ein int und kein int nullable Angabe Summe ein int? als input nur den gleichen Fehler, wahrscheinlich dazu führen, dass die Summe nur workes auf ints.
Jeder gute Abhilfe für dieses?
InformationsquelleAutor der Frage AndreasN | 2009-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT - ok, was ist mit diesem... (Shooting wieder da ich weiß nicht, Ihr Modell,...):
InformationsquelleAutor der Antwort Rashack
Den Sie verwenden möchten die nullable-form der Summe, so versuchen Sie, Gießen Sie Ihre Wert eine null:
Dein Problem wird hier diskutiert in mehr detail:
http://weblogs.asp.net/zeeshanhirani/archive/2008/07/15/applying-aggregates-to-empty-collections-causes-exception-in-linq-to-sql.aspx
InformationsquelleAutor der Antwort Scott Stafford
Vorausgesetzt, "v. Punkte" ist eine Dezimalzahl verwenden Sie einfach die folgende:
InformationsquelleAutor der Antwort Jeroen Bernsen
Wenn Sie nicht wie die casting nullabe dezimal-man könnte auch versuchen, mithilfe von Linq To Objects mit ToList () - Methode,
LinqToObjects Summe leer, die Sammlung ist 0, wo LinqToSql Summe der leeren Sammlung ist null.
InformationsquelleAutor der Antwort Emir
Versuchen Sie dieses heraus überprüfen:
So, die Wurzel des Problems ist, dass die SQL-Abfrage wie diese:
gibt NULL zurück,
InformationsquelleAutor der Antwort Pavel Shkleinik
Eine einfache, aber wirksame Abhilfe wäre nur die Summe der Stimmen, in denen Punkte.Count > 0, so dass Sie nie null-Werte:
InformationsquelleAutor der Antwort Razzie
Nur um eine andere Methode in den mix 🙂
Ich hatte ein ähnliches Szenario, aber ich war nicht der Vergleich ein zusätzliches Feld beim summieren...
InformationsquelleAutor der Antwort Phil
Ich hatte das gleiche problem. Gelöst, mit leeren Liste union:
Im Fall der "Punkte" ist integer sollte das funktionieren.
InformationsquelleAutor der Antwort Alex
Ich denke, dies ist der gleiche Fall.
Ich habe es behoben. Dies ist meine Lösung:
Ich hoffe, dass dies helfen.
InformationsquelleAutor der Antwort Pepa
Werden können, um diese Abfrage in try/catch..wenn "Ausnahme", dann waren es keine Stimmen gefunden
InformationsquelleAutor der Antwort 0x49D1
Vorausgesetzt, Punkte ist eine Liste von Int32, wie wäre es mit etwas wie:
InformationsquelleAutor der Antwort ProfNimrod
Dies funktioniert, ist aber nicht besonders schön oder gut lesbar ist.
InformationsquelleAutor der Antwort AndreasN
Ich hatte ein ähnliches Problem und kam mit der Lösung bekommen, was ich versuchte, um aus der Datenbank die Anzahl der diejenigen, und nur dann, wenn ich etwas zurückgeschickt tun, eine Summe. War nicht in der Lage, die Darsteller arbeiten aus irgendeinem Grund so dieses posting, wenn jemand anderes hatte ähnliche Probleme.
z.B.
Und dann überprüfen, um zu sehen, wenn Sie haben, irgendwelche Ergebnisse, so dass Sie nicht bekommen, wird null zurückgegeben.
InformationsquelleAutor der Antwort tcmorris
Ähnlich wie die vorherigen Antworten, aber Sie können auch die cast-das Ergebnis der gesamten Summe auf das nullable-Typ.
Wohl besser passt, was wirklich Los ist, aber es hat die gleiche Wirkung wie der cast in diese Antwort.
InformationsquelleAutor der Antwort OlduwanSteve
Dachte, ich würde werfen eine andere Lösung gibt. Ich hatte ein ähnliches Problem und das ist, wie ich landete Lösung:
InformationsquelleAutor der Antwort Jeff