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

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • Random Act of Kindness Video Contest

    Random Act o

    18 EYLÜL 2012
  • michal lelkowski

    michal lelko

    9 Temmuz 2006