C# 转换为值类型“Boolean”失败,因为具体化的值为null
这段代码以前可以工作,但现在我遇到了这个错误:转换为值类型“Boolean”失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为空的类型C# 转换为值类型“Boolean”失败,因为具体化的值为null,c#,C#,这段代码以前可以工作,但现在我遇到了这个错误:转换为值类型“Boolean”失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为空的类型 这个怎么了?我以前没有更改任何代码。这一次我犯了一个错误。我在这里有点冒险,但我想这与这句话有关: public ActionResult Votation(int id=0) { var events = db.Events_Info_tbl.Where(x => x.is_active == true).FirstOrDefa
这个怎么了?我以前没有更改任何代码。这一次我犯了一个错误。我在这里有点冒险,但我想这与这句话有关:
public ActionResult Votation(int id=0)
{
var events = db.Events_Info_tbl.Where(x => x.is_active == true).FirstOrDefault();
//query the first category
List<CampaignManager_tbl> candidates = new List<CampaignManager_tbl>();
candidates = (from cat in db.Events_Category_tbl
join can in db.Candidates_Info_tbl
on cat.events_category_id equals can.events_category_id
where cat.events_info_id == events.events_info_id
select new CampaignManager_tbl {
events_category_name = cat.events_category_name,
candidates_fullname = can.candidates_fullname,
candidates_info_id = can.candidates_info_id,
vote_no = cat.vote_no.Value,
isSelected = can.isSelected.Value,
events_category_id = cat.events_category_id
}).ToList();
return View(candidates);
}
如果两个表联接时,其中一个表未返回该特定字段的值,则该字段将为null。根据命名,这里的类型可能是某种类型的可空类型(可能是bool?),这与您的错误相匹配
尝试将其替换为以下内容:
isSelected = can.isSelected.Value,
当然,如果在您的案例中更有意义的话,您可以将这里的默认false替换为true
编辑:请注意,您可能应该以类似的方式对使用的另一列执行相同的操作,我假设这将返回int?:
我遇到这个错误是因为另一个问题。在我的查询中,我从帐户成员及其关联帐户中选择特定列:
vote_no = cat.vote_no.HasValue ? cat.vote_no.Value : 0
很可能EF足够聪明,可以忽略此强制转换,而不会在尝试将其转换为SQL时崩溃。db.Candidates\u Info\u tbl.IsSelected是位字段吗
如果是这样,查询可能会导致
DBContext.Set<AccountMember>()
.Include(am => am.Account)
.Select(am => new
{
am.ID,
am.IsPrimary,
Account = new { am.Account.ID, DoNotEmail = (bool?)am.Account.DoNotEmail }
});
isSelected为null,而您可能在CampaignManager_tbl类中将isSelected声明为bool
在CampaignManager tbl类中将isSelected更改为bool,然后重试。您从哪里得到错误?你试过缩小范围吗?在这一部分中,候选人=来自db.Events\u Category\u tblar中的cat,你确定你对null布尔值没有问题吗:new CampaignManager{…}?你能数一数吗?行吗?这是一个很长的问题。。。就像我说的,你试过缩小范围吗?例如,如果您将select更改为select new{cat,是否可以}这样做?视图不需要工作-您只需要调用ToList来检查它…我认为cat.vote_no,can.isSelected中的一个为null使用EF 5检查您的数据库数据,但没有看到.HasValue meth…:
DBContext.Set<AccountMember>()
.Include(am => am.Account)
.Select(am => new
{
am.ID,
am.IsPrimary,
Account = new { am.Account.ID, am.Account.DoNotEmail }
});
DBContext.Set<AccountMember>()
.Include(am => am.Account)
.Select(am => new
{
am.ID,
am.IsPrimary,
Account = new { am.Account.ID, DoNotEmail = (bool?)am.Account.DoNotEmail }
});
isSelected = can.isSelected.Value,