动态Linq占位符无法正常工作

时间:2017-12-20 08:18:33

标签: c# linq dynamic-linq

我收到了以下问题:

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"))}

它有效。

我想这意味着我错误地使用了占位符?

1 个答案:

答案 0 :(得分:1)

是的,您编写占位符的方式存在问题。

您的列名“MY_COLUMN”被视为字符串,不是列

所以我认为,你不能在这里使用占位符作为列名。您可以使用以下代码:

.Where(searchingColumnName +“= @ 0”,searchingValue);

对于C#6 .Where($“{searchingColumnName} = @ 0”,searchingValue);

请参阅此链接。它很好地解释了动态INQ滤波器:

https://q-a-assistant.info/computer-internet-technology/dynamic-linq-filter-never-retrieves-correct-results-uwp-xaml/676258