【发布时间】:2011-07-11 20:20:35
【问题描述】:
在我的搜索表单中,我让用户指定在该特定列中搜索哪些列以及要搜索的单词。
我得到的是一个键值映射,其中key = column 和value = search words。我遍历这些键和值并创建一个我想在查询中使用的字符串 (searchPhrase)。类似的东西:
var query =
db.Persons.
Where(searchPhrase);
但我不知道如何使用我的 searchPhrase 作为 where 条件?
以下是我循环表单集合的方式
public ActionResult Search(FormCollection collection)
{
List<string> conditions = new List<string>();
for (int i = 1; i <= 4; i++)
{
if (!String.IsNullOrEmpty(collection["columnName" + i]))
{
string s = String.Empty;
s += collection["Attributes" + i].ToString();
s += " = '";
s += collection["searchWord" + i].ToString();
s += "'";
conditions.Add(s);
}
}
searchPhrase = string.Join(" AND ", conditions.ToArray());
}
然后我想在上述查询中使用可能看起来像 surname LIKE 'adam' AND surname LIKE 'bob' 的 searchPhrase
这是我能想到的唯一方法,因为我让用户指定列。
编辑
这是搜索表单:(顺便说一句,这是一个管理功能,所以我不太担心 sql 注入攻击)
【问题讨论】:
-
这是一个 LINQ 查询吗?如果它是一个 SQL 查询,只是通过连接这样的字符串使您的系统容易受到 SQL 注入攻击。
-
呃。您不能提供用户界面的屏幕截图吗,我们会建议一个更好的选择。这是疯狂的东西。
-
我希望它是一个 LINQ 查询,但我不确定如何让用户指定列并仍然使用 LINQ。没有必要连接字符串,但这是我能想到的唯一方法,或者你知道另一种方法吗?
标签: asp.net-mvc