繁体   English   中英

如何将动态生成的搜索条件传递给LINQ

[英]How to pass dynamically-generated search criteria to LINQ

我在LINQ上遇到了一些麻烦。 在我的程序中,我生成一个SQL搜索查询,例如

select * from emp "where empId=1 and empname='abc'"

(其中带引号的文本在我的代码中生成)。 我可以将生成的“ where empId ...”字符串文本传递给SQL查询。

我想在LINQ中做同样的事情-我想将此字符串作为搜索条件,即类似

var employee=from a in Employee.AsEnumerable()
             "where empId=1 and empname='abc'"
              select a;

这可能吗? 提前致谢。

您可以采用基本查询(在您的情况下为Employee.AsEnumerable()),并使用生成字符串构成新查询的逻辑。 例如:

if(/*your logic for generating the string "where empId=1" here*/)
{
    query = query.Where(a.empId == 1);
}

if(/*your logic for generating the string "empname='abc'" here*/)
{
    query = query.Where(a.empname == "abc");
}

结果查询对象将包含所有运算符。 但是,正如其他人所说的那样,在一般情况下这并非微不足道。 SQL字符串也不是小事。 如果只需要生成几个过滤器,它将起作用,但是如果需要复杂的表达式,将是一个问题。

除非您打算雇用,否则这很难。

  • 动态代码编译,或
  • 您愿意创建一个(非常复杂的)解析器来分析查询并调用相应的linq扩展方法

我个人没有后者的经验。 至于前者,这有点棘手,如果您不进行适当的缓存和安全检查,可能会出错。 可执行代码注入非常危险。

我认为,如果可以预先确定查询的数量,最好使用不同的方法Where()例如Where()来过滤内容,否则,最好返回SQL。 通常,除非您由用户手动输入查询,否则您不需要这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM