Değer dökme türü 'Int32' hayata değer null başarısız oldu çünkü
Aşağıdaki kodu var. Hata alıyorum:
"Dökme değer türü 'Int32' hayata değer null olduğu için başarısız oldu. Ya sonuç türünün genel parametre veya sorguyu null olabilecek bir tür kullanmak gerekir."
CreditHistory tablo kayıtları vardır.
var creditsSum = (from u in context.User
join ch in context.CreditHistory on u.ID equals ch.UserID
where u.ID == userID
select ch.Amount).Sum();
Nasıl null değerleri kabul etmek için sorguyu değiştirebilir miyim?
CEVAP
Lınq-to-sql sorgu gibi kod idam değil, daha ziyade SQL çevrildi. Bu bazen bir "sızdıran soyutlama" verim beklenmeyen davranış.
Böyle bir durumda farklı yerlerde beklenmedik boşluk var boş yere kullanma. ...DefaultIfEmpty(0).Sum(0) eleman olabilir hiçbir yerde (oldukça basit) bu durumda, yardım ve SUM sql can verir null ise c# 0 bekliyoruz.
Daha genel bir yaklaşımla oluşturulan SQL beklenmedik bir null döndüren bir risk olduğunda COALESCE tercüme edilecek ?? kullanmak için:
var creditsSum = (from u in context.User
join ch in context.CreditHistory on u.ID equals ch.UserID
where u.ID == userID
select (int?)ch.Amount).Sum() ?? 0;
Bu ilk int? C söylemek atmalarını# bu ifade gerçekten dönebilirsiniz derleyici Sum() int bir döner olsa 10**,. Sonra ?? normal operatörü null servis talebini işlemek için kullanırız.
Bu yanıta göre, her iki SERİ için detaylar blog post bir ve Varlıkları için SQL ETMENİZ için yazdım.

C# ile jenerik hata " yardım;türü ...
Ben&; Olası 'null'" ile ...
Bir Java null int bir değer için kontr...
C tipi bir parametre, değer türü için ...
Dönüştürmek.() ChangeType türü Null ba...