简单LINQ语句中的语法错误

时间:2013-06-03 06:28:06

标签: asp.net-mvc linq

我正在开发MVC应用程序,我在控制器中使用LINQ。

我试图通过下面的查询得到一个重复,但它给出了一个错误......

  Approval oAP = new Approval();
  oAP = db.Approvals.Where(e => (e.ApprovedBy.Id == loggedEmployee.Id) && (e.ReviewNo == oPaymentAdvice.ReviewCount));

语法有错吗?

  

得到了答案

oAP = db.Approvals.Where(e => (e.ApprovedBy.Id == loggedEmployee.Id) && (e.ReviewNo == oPaymentAdvice.ReviewCount)).FirstOrDefault();

2 个答案:

答案 0 :(得分:4)

更改此

e.ApprovedBy.Id = loggedEmployee.Id

有关

e.ApprovedBy.Id == loggedEmployee.Id

您正在比较未分配值。

您也可以添加此

oAP = db.Approvals.Where(e => (e.ApprovedBy.Id == loggedEmployee.Id) && (e.ReviewNo == oPaymentAdvice.ReviewCount)).FirstOrDefault();

因为我假设您只想返回一个

答案 1 :(得分:0)

一些评论:

您应该可以删除Where:

oAP = db.Approvals.FirstOrDefault(e => (e.ApprovedBy.Id == loggedEmployee.Id) && (e.ReviewNo == oPaymentAdvice.ReviewCount));

就个人而言,我尝试避免使用First和FirstOrDefault函数,因为如果您知道只有一条记录,并且您想要强制执行此操作,则可以使用SingleOrDefault:

oAP = db.Approvals.SingleOrDefault(e => (e.ApprovedBy.Id == loggedEmployee.Id) && (e.ReviewNo == oPaymentAdvice.ReviewCount));

如果你知道总会有(超过)一条记录,你可以放弃'OrDefault'部分并使用First()或Single()。