无法转换bool?布尔

时间:2016-07-21 22:58:06

标签: c# asp.net entity-framework-6

我的数据层中的代码 DtbseDropDown = ii.DtbseDropDown 正在抛出错误,我不知道如何绕过它。错误说:“不能隐式转换类型'bool?' 'bool'。存在显式转换(你是否错过了演员?)“

以下是我的数据层和我的实体的代码块

数据层

public static List<ListProjectTypes> GetListProjectTypes()

    {
        using (var context = new Sys.EntityModels.HousingRehabEntities())
        {
            // build and execute query against the db
            //return context.ListProjectTypes.Where(x => x.DtbseDropDown=true).ToList();

            // build and execute query against the db
            return (from ii in context.ListProjectTypes
                    where (ii.DtbseDropDown == true)
                    //&& ((ii.LastName + ii.FirstName + ii.Middle) != null))
                    ////&& ((ii.LastName) != null))
                    orderby ii.SortOrder
                    select new Sys.Entities.ListProjectTypes
                    {
                        ProjectType = ii.ProjectType,
                        SortOrder = ii.SortOrder,
                        DtbseDropDown = ii.DtbseDropDown


        }).ToList();

        }
    }
}

实体

namespace CityOfMesa.HousingRehab.Sys.Entities
{

 public class ListProjectTypes
    {
        public string ProjectType { get; set; }
        public int? SortOrder { get; set; }
        public bool DtbseDropDown { get; set; }
    public ListProjectTypes()
    {

        ProjectType = string.Empty;
        SortOrder = 0;
        DtbseDropDown = true;

    }
}

}

4 个答案:

答案 0 :(得分:2)

是的,因为你的数据模型ii.DtbseDropDown是一个可以为空的bool,因而是错误。您应该尝试将其更改为

public class ListProjectTypes
    {
        public string ProjectType { get; set; }
        public int? SortOrder { get; set; }
        public bool? DtbseDropDown { get; set; }

答案 1 :(得分:2)

DtbseDropDown属性为bool(可以包含truefalse个值),而ii.DtbseDropDownbool?Nullable<bool>的简写},也可以是null。有关详情,请参阅Nullable Types (C# Programming Guide)。您正在尝试将bool?分配给bool,因此您会收到错误消息。您需要做的是检查bool?结构实际上是否具有值。如果是(.HasValue),则返回实际值(.Value),否则返回默认值(我在此处将默认值设置为false):

DtbseDropDown = ii.DtbseDropDown.HasValue ? ii.DtbseDropDown.Value : false

您也可以按照@test的建议在评论中使用ii.DtbseDropDown.GetValueOrDefault()。两者之间的区别在于,使用我的方法,您可以控制在ii.DtbseDropDownnull时输出的值,而Nullable<T>.GetValueOrDefault则返回default(bool)(即false)默认情况下。

答案 2 :(得分:0)

DtbseDropDown = ii.DtbseDropDown更改为DtbseDropDown = (bool)ii.DtbseDropDown

答案 3 :(得分:0)

您可以使用null-coalescing运算符。

bool? myBool = null;
bool newBool = myBool ?? false;