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

  • MisterBrightside

    MisterBright

    24 Mart 2006
  • sdasmarchives

    sdasmarchive

    2 HAZİRAN 2010
  • Sarah's YouTube Channel

    Sarah's YouT

    27 Temmuz 2009