在 sql WHERE {params} 中有很多参数可以吗?
Is it ok to have a lot of params in sql WHERE {params}?
所以,我有一个 SELECT
和我的 WHERE
,其中 select 有时会增加很多,有时不会 x = 1 OR x = 2
,我想甚至可能有其中 100 个。
这样做可以吗?或者它会破坏性能?
这是更形象的例子
string sqlString = String.Format("SELECT * FROM categories WHERE {0}",
stringWithAlotOfORsStatment)
根据情况和用户selected
生成stringWithAlotOfORsStatment
不确定这个问题是否有意义:L
您可以用单个 X IN (1,2,3)
替换多个 X=1 OR X=2...
语句,例如:
SELECT * From SomeTable where X in (1,2,3)
我建议使用 LINQ 和 EF 或 Dapper.NET 创建安全查询,而不是使用字符串格式来传递值列表。
在 LINQ to EF 数组中或 List.Contains 映射到 IN
子句:
var ids=new []{1,2};
var results = from r in ctx.SomeTable
where ids.Contains(r.x)
select r;
在 Dapper 中,您可以将数组作为参数传递:
string sql = "SELECT * FROM SomeTable WHERE x IN @ids"
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3});
所以,我有一个 SELECT
和我的 WHERE
,其中 select 有时会增加很多,有时不会 x = 1 OR x = 2
,我想甚至可能有其中 100 个。
这样做可以吗?或者它会破坏性能?
这是更形象的例子
string sqlString = String.Format("SELECT * FROM categories WHERE {0}",
stringWithAlotOfORsStatment)
根据情况和用户selected
生成stringWithAlotOfORsStatment
不确定这个问题是否有意义:L
您可以用单个 X IN (1,2,3)
替换多个 X=1 OR X=2...
语句,例如:
SELECT * From SomeTable where X in (1,2,3)
我建议使用 LINQ 和 EF 或 Dapper.NET 创建安全查询,而不是使用字符串格式来传递值列表。
在 LINQ to EF 数组中或 List.Contains 映射到 IN
子句:
var ids=new []{1,2};
var results = from r in ctx.SomeTable
where ids.Contains(r.x)
select r;
在 Dapper 中,您可以将数组作为参数传递:
string sql = "SELECT * FROM SomeTable WHERE x IN @ids"
var results = conn.Query(sql, new { ids = new[] { 1, 2, 3});