我正在开发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();
答案 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()。