【发布时间】:2016-10-27 16:41:39
【问题描述】:
我一直在尝试将一段相当基本的 SQL 代码转换为 Lamda 或 Linq,但我一无所获。这是 SQL 查询:
SELECT * FROM Form a
INNER JOIN FormItem b ON a.FormId = b.FormId
INNER JOIN FormFee c ON a.FormId = c.FormId
INNER JOIN FeeType d ON c.FeeTypeId = d.FeeTypeId
WHERE b.StatusId = 7
我试过了,但它没有做我想要的。
public Form GetFormWithNoTracking(int id)
{
return ObjectSet
.Where(x => x.FormId == id &&
(x.FormItem.Any(di => di.StatusId == (short)Status.Paid)))
.AsNoTracking()
.FirstOrDefault();
}
我试图只返回来自FormItem 的行,其StatusId 是Paid。但是,以上返回全部。我知道.Any() 将检查是否有任何匹配项以及是否有全部返回,所以在这种情况下,我的数据,对于这个表格,确实有具有Paid 的StatusId 的项目和一些具有@987654331 的项目@ 没有付款,所以它把它们都带回来了。
【问题讨论】:
-
您正在尝试使用 linq lamda 执行内部连接,快速搜索会找到您需要的结果:stackoverflow.com/questions/2767709/…stackoverflow.com/questions/9720225/…
-
现在这个函数应该返回第一个(如果有的话)
Form,它有一个FormItem和StatusIdPaid。由于您的返回类型是Form,因此我不完全确定您到底想要做什么。如果我正确理解您的问题,您只需要Form的FormItems和FormIdid其中StatusId是Paid,...对吗?