私は、LINQ to Entitiesに送信される式ツリーを動的に生成しています。私はフレームワークを提供しており、開発者はラムダ式として出力列を指定できます。例えば2つのLambdaExpressionsを1つのLamdaExpressionに結合する
、彼らは、データベースから値をプルする方法があるように指定することができ、列を持っていると言う:
p => p.Aliases.Count()
と別の列は次のとおりです。
p => p.Names.Where(n => n.StartsWith("hello"))
問題はここにあります私はこれらの両方を単一の式に組み合わせる必要があることを示します。
getter = field.SelectorExpression.Body;
そして私は、LINQは、Pがp.Aliases.Count()
であるかを知ることができないのでので、作るのエラーメッセージThe parameter 'p' was not bound in the specified LINQ to Entities query expression
を取得:
私の最初の試みでした。
私が試した次の事した
getter = Expression.Invoke(field.OrderBySelector, new[] {parameter});
はしかし、その後、私はまた、私はSQL Serverは、ラムダ式を実行する方法を知っていることを期待していないのでので、作るのメッセージThe LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
を受け取ります。
今のところ基本的にこの表現を持っている:
明らかitem => new MyClass
{
SomeValue = item.Name, // this was generated from some other code
AnotherValue = item.SomeOtherColumn, // there can be lots of these
AliasCount = p.Aliases.Count() // here of course is the problem
}
私は(私が持っているし、使用する方法を知っている)項目の表現でこれを構築していたときに「P」との表現を交換したいです。
TLDR LambdaExpressionで使用されるパラメータのすべてのインスタンスを別のExpressionに簡単に置き換えることはできますか?
ようにhttp://stackoverflow.com/questions/5430996/replacing-the-parameter-name-in-the-body-of-an-expression/5431309#5431309多分?それが答えるかどうかを教えてください。(「訪問者」のアプローチが最初に試しています) –
もう少し説明してもらえますか? p => p.Names.Where(n => n.StartsWith( "hello")) - 単一の式に対するパラメータのうちの1つが別の式である単一の式です表現... –
マーク・グラヴェル、あなたは文字通り私は男性の間で神です。あなたはこれを私のコードに入れてテストするよりも速く答えました! – tster