在我的搜索表单中,我让用户指定在该特定列中搜索哪些列和要搜索的单词。
我得到的是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());
}
然后我想在上面的查询中使用searchPhrase,它可能看起来像
surname LIKE 'adam' AND surname LIKE 'bob'
这是我能想到的唯一方法,因为我让用户指定列。
修改
这是搜索表单:(顺便说一下,这是一个管理员功能,所以我不太担心SQL注入攻击)
答案 0 :(得分:1)
您应该查看Dynamic LINQ。
答案 1 :(得分:1)
在这里找到我对其他问题的答案:Dynamic query with LINQ won't work
这里也解决了防止SQL注入攻击的问题。