我收到了以下问题:
query.Where("@0 != null && @1.ToString().Contains(@2)",
searchedColumnName, searchedColumnName, searchedValue);
它不起作用(有多个记录应该被检索)。
例如,请searchedColumnName == "MY_COLUMN"
和searchedValue == "8"
。当我调试到Dynamic Linq方法时,生成的LambdaExpression
表达式为:
{Param_0 => ((Convert("MY_COLUMN") != null) AndAlso "MY_COLUMN".ToString().Contains("8"))}
现在,如果我不使用占位符,例如:
query.Where(searchedColumnName + " != null && " +
searchedColumnName + ".ToString().Contains(\"" + searchedValue +"\")");
LambdaExpression
是:
{Param_0 => ((Param_0.MY_COLUMN != null) AndAlso Param_0.MY_COLUMN.ToString().Contains("8"))}
它有效。
我想这意味着我错误地使用了占位符?
答案 0 :(得分:1)
是的,您编写占位符的方式存在问题。
您的列名“MY_COLUMN”被视为字符串,不是列。
所以我认为,你不能在这里使用占位符作为列名。您可以使用以下代码:
.Where(searchingColumnName +“= @ 0”,searchingValue);
对于C#6 .Where($“{searchingColumnName} = @ 0”,searchingValue);
请参阅此链接。它很好地解释了动态INQ滤波器: