【问题标题】:Attempting to access results of Linq query in ASP MVC尝试在 ASP MVC 中访问 Linq 查询的结果
【发布时间】:2012-12-18 07:24:20
【问题描述】:

下面是我在一个 ASP MVC 控制器中使用的 Linq 查询。我试图从 SQL 数据库中提取一条记录,然后将其与用户的输入进行比较。如果用户输入的状态代码与用户输入的产品代码相关的状态代码不匹配,它将返回一条错误消息。

不过,我不知道如何从“课程”变量访问 StateCode 字段。使用 Visual Studio,我可以单步执行代码并查看其中的值(通过 Locals 窗口/读数检查时),但是我不知道如何获得我正在寻找的值。

这是我第一次使用 Linq,所以任何和所有的帮助/建议都将不胜感激。谢谢!

                var course = from c in db.AgentContEd
                             where c.CourseCode == agentconted.CourseCode
                             select c;

                if (agentconted.StateCode.Equals(course.StateCode))
                {
                    db.AgentContEd.Add(agentconted);
                    db.SaveChanges();
                    return RedirectToAction("Details", "Agent", new { id = agentconted.SymetraNumber });
                }
                else
                {
                    ViewBag.ErrorMessaeg = "State code must match Product Training state code";
                }

【问题讨论】:

    标签: asp.net-mvc visual-studio-2010 linq


    【解决方案1】:

    当您需要单个实体时,您正在撤回 IQueryable<T>。如果您的查询没有产生结果记录,则 course 将设置为 null。返回多于 1 条记录的查询将引发异常。

    (from c in db.AgentContEd
    where c.CourseCode == agentconted.CourseCode
    select c)
    .SingleOrDefault();
    

    【讨论】:

    • 这会引发错误:“序列包含多个元素”
    • 没关系,我刚刚意识到我从错误的表/模型中拉出。感谢您的帮助!
    • @NealR,这能解决你的问题吗?
    • 是的,确实如此。我指向一个使用该字段作为外键而不是主键的表,因此代码试图返回许多记录。
    【解决方案2】:

    还值得注意的是,如果您的 CourseCode 不受唯一键约束,您将需要使用 FirstOrDefault 或将您的查询包装在 try/catch 块中,因为 SingleOrDefault 将抛出错误,如果超过返回一个结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      相关资源
      最近更新 更多