[英]Linq entity look ahead to value in next row
當查詢我的實體框架數據庫時,我試圖根據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
將示例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只能進行等聯接。
我沒有意識到只要equal是主要運算符,就可以在LINQ連接中執行(某些)表達式,這會生成子選擇和內部連接,這似乎要快得多:
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 };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.