我有下面这段代码:
IQueryable<SomeType> allItems = ...;
var selectedItems = allItems.Where( item => ( item.State == 1 || item.State == 3 ) );
Console.WriteLine( selectedItems.ToString() );我得到了以下转储的查询:
SELECT [t0].[ItemId], [t0].[State], <other columns>
FROM [Items] AS [t0]
WHERE [t0].[State] = @p0 OR [t0].[State] = @p1您可以看到,实际值1和3不会插入到查询中,而是作为参数传递,这通常会导致选择次优的执行计划。
我能以某种方式让Ling-To-Sql发出WHERE [t0].[State] = 1 OR [t0].[State] = 3吗?
发布于 2014-10-31 23:58:16
参数化sql是使用像linq to sql或实体框架这样的orm的主要好处之一,这会阻止sql injection。Sql server还将缓存参数化sql的执行计划,从而提高整体应用程序性能。
This是一篇关于参数化sql的好处的好文章。
https://stackoverflow.com/questions/26676739
复制相似问题