在查询我的实体框架数据库时,我试图根据2行的值来匹配条件。
我当前的查询如下所示:
var query = context.table.where(x => x.row > 2);
一切正常。
我现在想要实现的是根据当前行和下一行中的值查询表格,例如:
var query = context.table.where(x => x.row > 2 && x.row[next row up in DB] < 2);
可以这样做。
我知道我可以在代码中实现这一点,但可以使用LINQ和实体在单个查询中完成吗?
以下是我将如何使用SQL执行此操作的示例:
SELECT *
FROM t_Table p
INNER JOIN t_Table f
ON (p.id + 1) = f.id
WHERE p.column = whatever
AND f.column = whatever2
答案 0 :(得分:1)
将示例SQL转换为LINQ to SQL:
var ans = from p in t_table
from f in t_table
where (p.id+1) == f.id && p.column == whatever && f.column == whatever2
select new { p, f };
这似乎不会在SQL中生成内部联接,而是交叉联接,但我假设SQL引擎将适当地处理它。请注意,LINQ只能进行等连接。
我没有意识到你可以在LINQ连接中做(某些)表达式,只要equal是主操作符,这会产生一个子选择和一个内部连接,这看起来要快得多:
var ans = from p in t_table
where p.column == whatever
let pidplus1 = p.id+1
join f in t_table on pidplus1 equals f.id
where f.column == whatever2
select new { p, f };