2017-12-20 12 views
0

私は次のクエリを持って動作しません。動的なLINQのプレースホルダが正しく

たとえば、searchedColumnName == "MY_COLUMN"searchedValue == "8"とします。私は、動的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

はい、プレースホルダの作成方法に問題があります。

カラム名「MY_COLUMN」は、のカラムではなく、の文字列とみなされます。

ここでは、ここで列名にプレースホルダを使用することはできません。以下のコードを使用できます。

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

C#6の場合 .Where($ "{searchedColumnName} = @ 0"、searchedValue);

このリンクを参照してください。それは非常によく、動的INQフィルタについて説明します。

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

+0

ので、動的LINQのは、列名のプレースホルダを使用することはできませんか? – HeyJude

関連する問題