Linq语句将多个值的查询字段转换为语句

时间:2015-07-06 14:51:58

标签: c# linq entity-framework

我有这样的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语句。

2 个答案:

答案 0 :(得分:2)

我使用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

希望这有帮助。

答案 1 :(得分:0)

在这种情况下,如果关注的是表现良好,那么您需要阅读很多文章来阅读以获得自己的观点。对于一次,您可能需要关注您的列是否需要和索引以及您的统计信息是否已更新。

如果您的值是请求并以字符串形式更新,请评估是否需要相关表来保存此值并在表中使用整数值具有相关的id。此int列可以具有索引,这将在数据和索引大小中提供更好的性能和更小的占用空间。

LINQ将尝试根据您的数据库结构提供最佳执行。因此,例如,如果您在数据库中提供了一个好的设计,那么在大多数情况下,您不必费心来自linq查询的结果sql。 (无论是在大型查询中还是在大型数据库中,都要进行此检查,并检查执行计划)