我的数据层中的代码 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;
}
}
}
答案 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
(可以包含true
或false
个值),而ii.DtbseDropDown
为bool?
(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.DtbseDropDown
为null
时输出的值,而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;