为什么我要为bool分配一个空值?解决这个问题的最佳方法是什么?

时间:2011-10-28 10:08:00

标签: c# linq-to-sql

我有一个Linq to SQL查询非常类似于以下内容:

var result = (from shareclass in database.ShareClassInfo

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

var list = result.ToList();

当我尝试从结果中创建列表时,我收到以下错误:

  

无法将null值赋给System.Boolean类型的成员,该类型是非可空值类型。

原因是IsOnlineListingbool,但数据库中的字段为空。所以我有效地尝试分配一个带有空值的值类型(这是不可能的)。

我认为解决这个问题的方法是让IsOnlineListing成为一个可以为空的类型,但我有点困惑,为什么我一开始就这么做。我的意思是,数据库字段被定义为[bit] NULL字段。我认为编译器比让我将null值分配给非可空类型更聪明,或者至少它会警告我。

所以我想知道的是,这是否是正确的解决方案?还有另一种方法吗?为什么编译器不能告诉我这是或可能是一个问题?

2 个答案:

答案 0 :(得分:3)

您需要更改IsOnlineListing

的声明

bool IsOnlineListing;

bool? IsOnlineListing;

或者做这样的事情

var result = (from shareclass in database.ShareClassInfo

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

var list = result.ToList();

答案 1 :(得分:0)

您可以使用nullable type