【问题标题】:Query db with supplied where condition [duplicate]使用提供的条件查询数据库 [重复]
【发布时间】:2011-07-11 20:20:35
【问题描述】:

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

我得到的是一个键值映射,其中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());
}  

然后我想在上述查询中使用可能看起来像
surname LIKE 'adam' AND surname LIKE 'bob' 的 searchPhrase

这是我能想到的唯一方法,因为我让用户指定列。

编辑
这是搜索表单:(顺便说一句,这是一个管理功能,所以我不太担心 sql 注入攻击)

【问题讨论】:

  • 这是一个 LINQ 查询吗?如果它是一个 SQL 查询,只是通过连接这样的字符串使您的系统容易受到 SQL 注入攻击。
  • 呃。您不能提供用户界面的屏幕截图吗,我们会建议一个更好的选择。这是疯狂的东西。
  • 我希望它是一个 LINQ 查询,但我不确定如何让用户指定列并仍然使用 LINQ。没有必要连接字符串,但这是我能想到的唯一方法,或者你知道另一种方法吗?

标签: asp.net-mvc


【解决方案1】:

你应该看看Dynamic LINQ

【讨论】:

  • 上面的查询不是动态linq吗?
  • 你看过链接了吗?您尝试执行动态 Linq 查询,动态 Linq 库(链接)允许您执行此操作。
  • 不知如何添加system.linq.dynamic?它是否包含在 system.linq 中,因为我有。我必须单独添加动态位吗?
  • 下载c#示例,将DynamicLibrary.cs文件导入到你的项目中就大功告成了。然后添加using System.Linq.Dynamic(它在cs中定义)并使用现在可用的扩展方法。
  • 使用动态还是不行。这个查询不应该工作吗? db.Persons.Where("surname LIKE 'bob' AND lastname LIKE 'stone'");
猜你喜欢
  • 2022-01-12
  • 2020-01-30
  • 2011-07-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
相关资源
最近更新 更多