Neden bir boole null değeri atalım? Bunu çözmenin en iyi yolu nedir?

Aşağıdakilere çok benzer bir SQL sorgusu var:

var result = (from shareclass in database.ShareClassInfo

        where shareclass.Id == ID
        select new ShareClass
                   {
                       IsOnlineListing = shareclass.IsOnlineListing
                   }
       );

var list = result.ToList();

Sonuçlardan bir liste oluşturmaya çalıştığımda aşağıdaki hatayı alıyorum:

Boş değer, null olmayan bir değer türü olan System.Boolean türünde bir üyeye atanamaz.

Bunun nedeni IsOnlineListing 'un bir bool olmasıdır, ancak veritabanındaki alan boştur. Bu yüzden, null değeri olan bir değer türü atamaya çalışıyorum (ki bu imkansız).

Bunun çözümünün IsOnlineListing 'u null yapılabilen bir tür yapmak olduğunu düşünüyorum, ancak ilk başta bunu yapmam için neden biraz kafam karıştı. Demek istediğim, veritabanı alanı [bit] NULL alanı olarak tanımlanır. Derleyicinin, null değerini null olmayan bir türe atamamdan daha akıllı olacağını ya da en azından beni bunun hakkında uyaracağını düşündüm.

Yani merak ettiğim şey bu doğru çözüm mü? Bunu yapmanın başka bir yolu var mı? Derleyici neden bana bunun bir problem olduğunu söyleyemedi?

0
Sütun NULL ya da daha sonra değiştirildi mi?
katma yazar V4Vendetta, kaynak

2 cevap

you need için change your declaration of IsOnlineListing

itibaren

bool IsOnlineListing;

için

bool? IsOnlineListing;

Ya da böyle bir şey yap

var result = (itibaren shareclass in database.ShareClassInfo

    where shareclass.Id == ID
    select new ShareClass
               {
                   IsOnlineListing = shareclass.IsOnlineListing.HasValue ?
                       shareclass.IsOnlineListing.Value : false;
               }
   );

var list = result.içinList();
3
katma
Veya IsOnlineListing = shareclass.IsOnlineListing.Value .
katma yazar Cipi, kaynak
hızlı yazarak
katma yazar Waqas Raja, kaynak

Bir nullable türü kullanabilirsiniz.

0
katma