Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换为值类型“Boolean”失败,因为具体化的值为null_C# - Fatal编程技术网

C# 转换为值类型“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

这段代码以前可以工作,但现在我遇到了这个错误:转换为值类型“Boolean”失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为空的类型


这个怎么了?我以前没有更改任何代码。这一次我犯了一个错误。

我在这里有点冒险,但我想这与这句话有关:

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,