Değer dökme türü 'Int32' hayata değer null başarısız oldu çünkü | Netgez.com
SORU
28 Temmuz 2011, PERÅžEMBE


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
28 Temmuz 2011, PERÅžEMBE


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.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • Sergio Lafuente Rubio

    Sergio Lafue

    11 Aralık 2008