問題タブ [expressionvisitor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
expressionvisitor - ExpressionVisitor.VisitParameter、各パラメーターを 2 回印刷するのはなぜですか?
VisitParameter が各パラメータを 2 回出力するのはなぜですか?
結果:
バツ
y
バツ
y
c# - ParameterExpressionを実際の式に解決します
完全に機能するLINQ-Providerを作成しましたが、1つの例外があります。LINQ-QueriesをODATA-URL標準に変換します。
次のLINQステートメントがある場合:
また、式ビジターを使用して式ツリーにアクセスすると、タイプがParameterExpressionである式パーツ(OrderByDescending)を取得します。
私の質問は今です:選択したx.Name.ToLower()式に到達するにはどうすればよいですか?orderByステートメントを次のように変換できるようにします
//編集:言い換えると:ParameterExpression {x=>x}があります。この式を{x=>x.Name.ToLower()}に解決したい
c# - C# ExpressionVisitor.VisitBinary
From: 方法: 式ツリーを変更する (C# および Visual Basic)
http://msdn.microsoft.com/en-us/library/bb546136.aspx
このメソッドの目的とその動作について間違っている場合は修正してください。ありがとうございました。
既存の experssion がある場合、Expresstion Visitor はすべての BinaryExpression をこのメソッドに送信するため、私の理解では、この 2 行は無駄です。
これらの 2 つの行は同じことを行うため、このメソッドに送信されるすべての BinaryExpression に対して責任があります。私は正しいですか?
Expression.MakeBinary の目的は、BinaryExpression を新しいものに更新することです。では、なぜこの方法を使用しないのですか: b.Update??
最後に、このメソッドは、この式のすべての AndAlso を OrElse に置き換えますか?
よろしくお願いいたします。
c# - ac#式を変換する
ac#式を変換しようとしています。これが私が探している結果の例です。変換:
これに:
以下のコードでわかるように、FieldIDは、実際にはクラスの属性の反映を介して取得されます。私が今得ているエラーは、「タイプ'System.Int32'の式はリターンタイプ'System.Boolean'には使用できません」であるConvertからのリターンです。
私は壁にぶつかって、誰かが私がここで間違っていることを見ることができるかもしれないと思いました。これが私のコードです:
linq - 複数の型を持つ ExpressionVisitor
Expression<Func<T1,bool>>
ExpressionVisitor を使用して型をに変換していますがExpression<Func<T2,bool>>
、非常にうまく機能します。しかし、ナビゲーション プロパティ ExpressionVisitor が原因で、式に別の型が含まれていると例外が発生することに気付きました..
2 つの異なるクラスがあるとします。
これらの 2 つのクラスには、接尾辞「Info」が付いた完全に等しい DTO があります。だから私は4つのクラスを持っていますBrand, BrandInfo, Model, ModelInfo
今、私は以下のような表現を得ました。
Expression<Func<BrandInfo,bool>>
この式は で正常に変換できますExpressionVisitor
。しかし、以下のような式を変換したい場合、例外が発生します。
ExpressionVisitor
のみで機能し、クラスとBrand
クラスにはプロパティとしてが含まれますが、ターゲット クラス BrandInfo にはプロパティとしてが含まれます。したがって、プロパティをバインドしようとすると、例外がスローされます。BrandInfo
Brand
IEnumerable<Model>
Models
IEnumerable<ModelInfo>
Models
ExpressionVisitor
Models
複数の型を含む式を変換する方法が見つかりませんでした。
ここに私が変換するために使用するコードがあります
c# - ExpressionVisitor.Visit は、データ サービス クエリ ビジターで「還元可能なノードである必要があります」というエラーをスローします。
WCF データ サービスのリポジトリ パターンの実装に問題があります。要約すると、必要なリポジトリにプラグ可能なモデルを利用するクライアント アプリケーション内でリポジトリ パターンを使用しようとしています。根本的な問題は、私のリポジトリ インターフェイス IRepository が、それが格納するアイテムのインターフェイス タイプ バリアントについてしか認識できないことです。これは、注文の Data Service 実装からクライアント アプリケーションを抽象化することです。
一般に、この概念は、Data Services が関与するまで問題なく機能します。現在、NuGet の Data Services v5.4 を使用しています。リポジトリで ToList() のような単純なアクションを実行すると、すべてが正常に機能し、変換によって結果が OData サービスからの注文のリストに変換されます。ただし、orderby を実行しようとすると、クエリ式がより複雑になり、クエリ可能な型のインターフェイス バリアントのインスタンスを作成しようとするため、戻り値の型を設定できません。つまり、Order の代わりに IOrder のインスタンスを作成しようとします。
ただし、クライアントレベルでは、キャストを使用して型を強制すると機能します...
明らかに、これは切断された型のマントラに反しています。クライアント アプリケーションは、将来 OData を切り替えたい場合に備えて避けたいデータ サービス ライブラリからの強力な型 'Order' を認識しなければならないからです。
次に、タイプを解決するためのメソッドのハンドルを取得できる Data Service Client 側の Context クラスに出くわしましたが、私の場合、何らかの理由で解決が呼び出されませんでした。
その後、私が見始めたのは ExpressionVisitors でした。これは、この混乱から抜け出すためのチケットであると今でも信じています。これは、クエリが強い型を返しますが、インターフェイスの種類。
空のシェル ExpressionVisitor 実装を使用する場合など
これは、データ サービス以外のクエリ (クエリ可能なリストなど) では問題なく機能しますが、データ サービス リポジトリ パターンのクエリでは、(少なくとも私にとっては) 役に立たない「ノードを縮小する必要があります」というメッセージが表示されます。私が推測しているのは、式ツリーのビジターが、データ サービス クエリにカスタム化されたノード タイプにヒットし、それに対して何をすべきかわからないということです。しかし、何か別のことをするように言われない限り、ExpressionVisitor は単にツリーにあるものをコピーすると思いましたか?
とにかく、私が求めているのは、この ExpressionVisitor を使用してクエリの戻り値の型を OData クエリに置き換えるにはどうすればよいですか? 既存の Data Services Expression Visitor を探してみましたが、見つかりません。クライアント側のデータ サービスでインターフェイス タイプのクエリからクエリを生成する必要がありますが、同じ名前の厳密な型が返されます。
c# - 式 x=>!x を x=>x!=true に、x=>x を x=>x==true に書き換える方法
次のように表現すると仮定します。
上記のような式を次のような式に変換 (式ビジターを使用して書き換え) する必要があります。
注: より複雑な式がある場合、リライターはより一般的なケースでも機能する必要があります。