1

下面是我在一个 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";
                }
4

2 回答 2

5

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

(from c in db.AgentContEd
where c.CourseCode == agentconted.CourseCode
select c)
.SingleOrDefault();
于 2012-12-17T23:19:11.383 回答
0

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

于 2012-12-17T23:24:20.417 回答