使用where where condition查询db

时间:2011-06-08 09:00:57

标签: asp.net-mvc

在我的搜索表单中,我让用户指定在该特定列中搜索哪些列和要搜索的单词。

我得到的是key = columnvalue = 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注入攻击) enter image description here

2 个答案:

答案 0 :(得分:1)

您应该查看Dynamic LINQ

答案 1 :(得分:1)

在这里找到我对其他问题的答案:Dynamic query with LINQ won't work
这里也解决了防止SQL注入攻击的问题。