簡體   English   中英

Linq實體期待下一行的價值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM