Cannot Convert bool? to bool

asp.net c# entity-framework-6

Question

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;

    }
}

}

1
1
7/21/2016 10:58:43 PM

Popular Answer

DtbseDropDown property is bool (can have true or false values) whereas ii.DtbseDropDown is bool? (shorthand for Nullable<bool>, i.e. 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) (i.e. false) by default.

2
5/23/2017 12:22:32 PM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow