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.