简体   繁体   中英

Cannot Convert bool? to bool

My code in my Data Layer DtbseDropDown = ii.DtbseDropDown is throwing an error and I am not sure how to get around it. The error says: "Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)"

Here are the code blocks for my Data Layer and my Entities

Data Layer

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();

        }
    }
}

Entities

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;

    }
}

}

Yes that's cause your datamodel ii.DtbseDropDown is a nullable bool and thus the error. You should try change it to

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

DtbseDropDown property is bool (can have true or false values) whereas ii.DtbseDropDown is bool? (shorthand for Nullable<bool> , ie can also be null . See Nullable Types (C# Programming Guide) for more). You're trying to assign a bool? to a bool , hence the error you are getting. What you need to do is check if the bool? struct actually has a value first. If it does ( .HasValue ), return the actual value ( .Value ), else return a default value (I've set the default value to false here):

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

You can also use ii.DtbseDropDown.GetValueOrDefault() , as suggested by @test in the comments. The difference between the two is that with my approach you can control what value to output when ii.DtbseDropDown is null , whereas Nullable<T>.GetValueOrDefault returns default(bool) (ie false ) by default.

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

You can use null-coalescing operator.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM