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

Dynamic Linq placeholders don't work properly

我有以下查询:

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

而且有效。

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

是的,你写占位符的方式有问题。

您的列名称 "MY_COLUMN" 被视为字符串,不是列

所以我认为,您不能在此处使用列名的占位符。您可以使用以下代码:

.Where(searchedColumnName+ " = @0", searchedValue);

对于 C#6 .Where($"{searchedColumnName} = @0", searchedValue);

参考这个 link。它很好地解释了动态INQ过滤器:

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