下面是我在我的一个ASP MVC控制器中使用的Linq查询。我试图从SQL数据库中提取一条记录,然后将其与用户的输入进行比较。如果用户输入的状态代码与用户输入的产品代码关联的状态代码不匹配,则会返回错误消息。
但是,我对如何从“course”变量访问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";
}
答案 0 :(得分:5)
当您需要单个实体时,您将撤回IQueryable<T>
。如果查询未生成结果记录,则课程将设置为null。返回多于1条记录的查询将引发异常。
(from c in db.AgentContEd
where c.CourseCode == agentconted.CourseCode
select c)
.SingleOrDefault();
答案 1 :(得分:0)
另外值得注意的是,如果您的CourseCode不受唯一键约束的约束,您需要使用FirstOrDefault
或将查询包装在try / catch块中,因为SingleOrDefault
将抛出如果返回多个结果,则会出错。