簡體   English   中英

通過多個值查詢字段的 Linq 語句轉換為 in 語句

[英]Linq statement that queries field by multiple values gets converted to in statement

我有這樣的 linq 語句:

this.DataContext.TableName.Where(r => r.Field =="REQUEST" || r.Field== "UPDATE")

轉換為 sql 時的語句如下所示:

 WHERE ([Extent1].[Field] IN (N'REQUEST',N'UPDATE'))

而不是:

WHERE Field = 'REQUEST' or Field = 'UPDATE'

底部示例的運行速度是頂部示例的兩倍。 是否有人能夠指出我正確的方向,以使轉換后的 SQL 看起來像下面的示例。

我正在使用 C# ASP.Net MVC 5、EF6,但無論我嘗試什么,都給出相同的結果並使用 IN 語句。

我將 LINQPad4 用於:

Customers.Where(x => x.Name == "Tom" || x.Name == "Dick").Dump()

產生:

-- Region Parameters
DECLARE @p0 NVarChar(1000) = 'Tom'
DECLARE @p1 NVarChar(1000) = 'Dick'
-- EndRegion
SELECT [t0].[ID], [t0].[Name]
FROM [Customer] AS [t0]
WHERE ([t0].[Name] = @p0) OR ([t0].[Name] = @p1)

IN vs OR 在這里討論: IN vs OR in the SQL WHERE Clause

希望這可以幫助。

在這種情況下,如果關注的是性能良好,您可以閱讀一長串文章來發表自己的意見。 這一次,您可能不得不擔心您的列是否需要索引以及您的統計信息是否更新。

如果您的值是作為字符串請求和更新的,請評估您是否需要一個相關表來保存此值,並在您的表中具有一個具有整數值的相關 id。 這個 int 列可以有一個索引,這將提供更好的性能和更小的數據和索引大小的占用空間。

LINQ 將嘗試根據您的數據庫結構提供最佳執行。 因此,例如,如果您在數據庫中提供了良好的設計,則在大多數情況下您不必擔心 linq 查詢的結果 sql 是什么。 (在大查詢和大數據庫中總是進行此檢查,並檢查執行計划)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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