このLinqKit式を呼び出す方法
public static Expression<Func<Transaction, string>> ExpressionOfStatusName
{
get
{
Expression<Func<Transaction, string>> status =
(transaction) => transaction.TransactionStatus.Name;
return status;
}
}
動的linqクエリ(MicrosoftのSystem.Linq.Dynamicを使用した文字列としてのLinq)
この式は、次のような標準のLinqクエリでうまく機能します
Expression<Func<Transaction, string>> expressionOfStatusName = Transaction.ExpressionOfStatusName;
var ex = from transaction in context.Transaction.AsExpandable()
select expressionOfStatusName.Invoke(transaction)
しかし、動的linqクエリからそれを呼び出そうとすると、「該当するメソッド 'Invoke'はタイプ 'Expression`1に存在しません'というエラーが表示されます。ファイルSystem.Linq.Dynamicにlinqkitインポートを追加しようとしましたが、まだ機能していません。
そんなことができるようになりたい
var ex = context.Transaction.AsExpandable()
.Select (transaction=>transaction)
.Select("new { test = expressionOfStatusName.Invoke(transaction)");
ご協力ありがとうございました
Linqはfuncの式を期待しています。文字列を受け取り、それらを式ツリーに変換するMS Linq.Dynamic拡張機能を使用できます。または、任意のツールを使用して式ツリーを構築できます。ただし、MS動的linq拡張は、文字列入力の限られたセットを解析します。 いくつかのサンプルドキュメント/ブログ expressionOfStatusName.Invoke(transaction)を解析するように要求しています。ソースをデバッグして確認することはできますが、簡単なメンバーシップ分析がそこにあることを思い出します。 ソースはここにあります
さらに、パースチャレンジに合格したら、受け入れ可能な匿名型入力の制限を押し上げていると思います。 匿名型とLinq