【发布时间】:2018-03-16 09:00:56
【问题描述】:
我正在使用循环构建我的查询
for (var i = 0; i < query.BlackWhiteListFieldMatchProxy.Count; i++)
{
sb.Append($@"(
MatchType = {(int)query.BlackWhiteListFieldMatchProxy[i].MatchType}
AND EntityType = {(int)query.BlackWhiteListFieldMatchProxy[i].EntityType}
AND MatchFieldType = {(int)query.BlackWhiteListFieldMatchProxy[i].MatchFieldType}
AND (
(
MatchValue = '{query.BlackWhiteListFieldMatchProxy[i].MatchValue1}'
OR MatchValue = {query.BlackWhiteListFieldMatchProxy[i].MatchValue2Or ?? "Null"}
)
AND
(
{query.BlackWhiteListFieldMatchProxy[i].MatchValue2And ?? "Null"} is Null
OR MatchValue2 is Null
OR MatchValue2 = {query.BlackWhiteListFieldMatchProxy[i].MatchValue2And ?? "Null"}
)
)
)");
if (i != query.BlackWhiteListFieldMatchProxy.Count - 1)
sb.Append($@"
OR");
}
但我有这个问题
{query.BlackWhiteListFieldMatchProxy[i].MatchValue2And ?? "Null"} is Null
如果为 Null 则有效,否则真正的值将没有“”
问题是我不能使用类似的东西
@MatchValue
因为我有同名的参数列表,只是列表中的编号不同,因此名称将相同,并且无法正确映射
【问题讨论】:
-
发布函数的完整代码。
-
您正在将文字注入 SQL;这是一个非常非常非常糟糕的主意......你说“问题是我不能使用像
@MatchValue这样的东西,因为我有同名的参数列表,只是列表中的数字不同,名称将是相同,它不会正确映射它`-我不明白这是一个问题:只需创建您需要填写查询的任何其他参数。您能否解释更多使用常规参数阻止您的原因在这里?因为我不明白... -
我有对象列表 BlackWhiteListFieldMatchProxy。我不知道有多少。每个对象都有 MatchType、EntityType 等。但是每个对象的每个循环中,其字段的值都不同。我将如何使用 @ 映射参数并取决于当前的循环步骤。名称相同,值不同。所有这些都必须组合在一个查询中
标签: c# sql .net sql-server