[英]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字符串也不是小事。 如果只需要生成几个过滤器,它将起作用,但是如果需要复杂的表达式,将是一个问题。
除非您打算雇用,否则这很难。
我个人没有后者的经验。 至于前者,这有点棘手,如果您不进行适当的缓存和安全检查,可能会出错。 可执行代码注入非常危险。
我认为,如果可以预先确定查询的数量,最好使用不同的方法Where()
例如Where()
来过滤内容,否则,最好返回SQL。 通常,除非您由用户手动输入查询,否则您不需要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.