【问题标题】:Sequence contains no matching element error when a table is empty表为空时,序列不包含匹配元素错误
【发布时间】:2015-09-04 13:22:50
【问题描述】:

当表格为空时,我收到此错误。也就是说,当模型没有价值时,我会收到此错误:

序列不包含匹配元素

我怎样才能在这里加入一些逻辑来摆脱它?

问题出在这里:

var emp = model.vm.Single(i => i.JobseekerId == id);

我试过的是:

public ActionResult JobSeekerProfile(ViewModel model)
{
    if (Session["LogedUserID"] != null)
    {
        JobContext jcntxt = new JobContext();
        int id = Convert.ToInt32(Session["LogedUserID"]);
        model.vm = from jr in jcntxt.JobseekerRegestrations
                   join jc in jcntxt.JobseekerContactdetails on jr.JobseekerId equals jc.JobseekerId
                   join jb in jcntxt.JobseekerBackgroundDetails on jc.JobseekerId equals jb.JobseekerId
                   join jj in jcntxt.JobseekerJobDetails on jc.JobseekerId equals jj.JobseekerId
                   select new ViewModel
                   {
                       JobseekerId = jr.JobseekerId,
                       FirstName = jc.FirstName,
                       LastName = jc.LastName,
                       EmailID = jc.EmailID,
                       JobTitle = jj.JobTitle,
                       Location1 = jj.Location1,
                       University = jb.University,
                       TechnicalExp = jb.TechnicalExp,
                       WorkField = jb.WorkField
                   };

        var job = model.vm.Single(i => i.JobseekerId == id);
        model.FirstName = job.FirstName;
        model.LastName = job.LastName;
        model.EmailID = job.EmailID;
        model.JobTitle = job.JobTitle;
        model.Location1 = job.Location1;
        model.University = job.University;
        model.TechnicalExp = job.TechnicalExp;
        model.WorkField = job.WorkField;
        return View(model);
    }
    else
    {
        return RedirectToAction("JobSeekerLogin");
    }
}

查看

@model Sample.Models.ViewModel
<div class="row">
    <div class=" col-md-12 col-lg-12 ">
        <table class="table table-user-information">
            <tbody>
                <tr>
                    <td>User Name:</td>
                    <td>@Model.FirstName @Model.LastName</td>
                </tr>
            </tbody>
        </table>
    </div>
</div>

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

    使用SingleOrDefault方法,然后检查结果对象是否为null

    var job = model.vm.Where(i => i.JobseekerId == id).SingleOrDefault();
    if (job != null)
    {
        model.FirstName = job.FirstName;
        model.LastName = job.LastName;
        model.EmailID = job.EmailID;
        model.JobTitle = job.JobTitle;
        model.Location1 = job.Location1;                
        model.University = job.University;
        model.TechnicalExp = job.TechnicalExp;
        model.WorkField = job.WorkField;
    }
    

    【讨论】:

      【解决方案2】:

      Single 预计 总是 我们正好有 1 个结果。零或大于 1 将导致异常。

      也许你想改用SingleOrDefault,但是一旦你这样做了,job 可能为空 - 在这种情况下,你的下一行将与 NullReferenceException 出错 - 所以请确保你捕获它:

      var job = model.vm.SingleOrDefault(i => i.JobseekerId == id);
      if (job != null)
      {
          model.FirstName = job.FirstName;
          model.LastName = job.LastName;
          model.EmailID = job.EmailID;
          model.JobTitle = job.JobTitle;
          model.Location1 = job.Location1;                
          model.University = job.University;
          model.TechnicalExp = job.TechnicalExp;
          model.WorkField = job.WorkField;
      }
      

      【讨论】:

      • @YuvalItzchakov 是的,我做到了
      猜你喜欢
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2014-05-23
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多