Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按多个值查询字段的Linq语句转换为in语句_C#_Linq_Entity Framework - Fatal编程技术网

C# 按多个值查询字段的Linq语句转换为in语句

C# 按多个值查询字段的Linq语句转换为in语句,c#,linq,entity-framework,C#,Linq,Entity Framework,我有这样一个linq声明: this.DataContext.TableName.Where(r => r.Field =="REQUEST" || r.Field== "UPDATE") WHERE ([Extent1].[Field] IN (N'REQUEST',N'UPDATE')) 转换为sql时的语句如下所示: this.DataContext.TableName.Where(r => r.Field =="REQUEST" || r.Field== "UPDATE

我有这样一个linq声明:

this.DataContext.TableName.Where(r => r.Field =="REQUEST" || r.Field== "UPDATE")
 WHERE ([Extent1].[Field] IN (N'REQUEST',N'UPDATE'))
转换为sql时的语句如下所示:

this.DataContext.TableName.Where(r => r.Field =="REQUEST" || r.Field== "UPDATE")
 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)
在vs或中,此处讨论:


希望这能有所帮助。

在这种情况下,如果您关心的是性能良好,那么您需要阅读一大串文章,以获得自己的意见。这一次,您可能需要考虑您的列是否需要索引,以及是否更新了统计数据

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


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

Hi您可以发布两个查询的执行计划评估,以比较它们是否以不同的方式运行。在我看来,两者都将以相同的方式运行,但是检查执行计划并发布一个图像。您是否尝试过
(r.Field==“REQUEST”)|(r.Field==“UPDATE”)
?此外,我倾向于同意@Juan。在检查查询计划后,我意识到IN语句必须进行隐式转换,因为它是一个Varchar列,linq创建值以作为N'REQUEST'进行搜索,因此必须执行到nvarchar的转换。这让我想知道,由于我继承的数据库有很多varchar字段,还有多少其他地方的性能是由它组成的。谢谢你朝着正确的方向轻推。