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

  • Jose LviS el Bambino ( JLB )   LviSito

    Jose LviS el

    3 ŞUBAT 2008
  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • Living Waters

    Living Water

    9 AĞUSTOS 2006