問題タブ [expression-trees]

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.

0 投票する
1 に答える
2809 参照

c# - C# の BinaryExpression でスタックする

実装したい

式ツリーとして試してみました

Cond を使用すると、true/false を取得できますが、Condition が返す必要がある LeftEx または RightEx は取得できません。

ドキュメントには何も見つかりませんでした。

ピーター

0 投票する
1 に答える
4272 参照

c# - 式ツリーlinqはパラメータの値を取得しますか?

上記のコードでは、プロパティ名だけでなく、プロパティタイトルの実際の値を取得したいのですが、可能ですか?

0 投票する
3 に答える
673 参照

sql-server - SQL Server の「標準」形式の式を生成する簡単な方法は?

これは、SQL Server 2005 (またはそれ以降) の計算列と既定の制約 (および場合によっては他の式) に関連しています。これらは両方とも、任意の式を使用して値を生成します。たとえば(year+1)、「来年」を表す計算列などです (これは明らかに単純でばかげた例です)。

私がやろうとしていること:一部のテーブルの既存の計算列 (または既定の制約) が意図した定義と一致するかどうかを判断できるようにしたいと考えています。テーブル。を使用して計算列の定義を取得し、カタログ ビューsp_helptextから既定の制約の定義を取得できます。sys.default_constraints

私が問題を抱えていること:上記のソースから返された式は、列/制約の作成に使用された形式と一致しない正規化/標準形式になっています。上記の例では、SQL は式を に正規化します([year]+(1))。したがって、このフォームと元のフォームの単純な文字列比較では、それらが同じかどうかを確実に判断することはできません。

私がすでに考えた解決策:

  • SQL の形式に一致するように元の式を生成します。これには、文書化されていないフォームを生成するために SQL が使用するルールを知る必要があるため、優れたソリューションではありません。
  • 両方のフォームを解析して AST にし、それらを比較します。私はすでに元のフォームの AST を作成していますが、パーサーを持っていないため、作成したくありません。
  • 一時テーブルを作成し、元の式を使用して計算列を追加してから、正規化された式を読み戻します。これはかなり信頼できますが、理論的にはこの比較は読み取り専用操作であるため、汚い感じがします。

これを処理するための別の良いオプションを考えられる人はいますか? 入力式を正規化/標準形式で吐き出すデバッグ/診断ツールを誰かが知っていることを願っています。

0 投票する
1 に答える
217 参照

linq - 条件付きLinq式ツリー

実行時に動的にコンパイルされるLinq式が必要です

私は値を持っており、たとえば5000よりも大きい値と70を超える別の値の場合、定数xを返す必要があります。それ以外の場合は5000よりも大きい値を返し、70未満の値はyを返します。式ツリーa>5000を作成するにはどうすればよいですか。 &b <70、次にd else a> 5000&b> 70、次にe

0 投票する
3 に答える
24498 参照

c# - ラムダから式ツリーへの変換

私はそれを本当にシンプルに保ちます、

ラムダから式ツリーを取得するにはどうすればよいですか?

またはクエリ式から?

0 投票する
1 に答える
753 参照

.net - インターフェイスmemberinfoオブジェクトからの.netリフレクション検索オブジェクト

さて、私はインターフェースを持っています、それを呼び出しましょう

インターフェイスを実装するクラスもあります

次に、次のように、さまざまな実装を含むインターフェイス「バー」のリストを含む別のオブジェクトにぶら下がっているプロパティがあります。

今、式ツリー/関数をそのように使用すると

式ツリーから memberinfo を取得できます。ただし、me​​mberinfo はインターフェイス メソッドを指しており、そのクラスはインターフェイスです。それはほとんど機能しますが、その親クラスが何であるかを知る必要があるため、memberinfo オブジェクトから、「bar」インターフェイスから離れたメソッドの呼び出しを見つけて確認する必要があり、クラス タイプは「fooBar」です。これを行う方法はありますか?ウォッチ ウィンドウで memberinfo オブジェクトを掘り下げましたが、親型に到達できません。私は何かが欠けているかもしれません。

0 投票する
1 に答える
358 参照

c# - Generic Repository Linq2Sql impedence mismatch problem

I am working on a repository pattern where the API look as follows:

#xA;

where visitor is a domain object and x represents this domain object. The method signature of the Find method on the repository is:

#xA;

This is all wonderful until I attempt to use this with Linq2Sql because linq2sql creates its own objects and as a result when I want to call:

#xA;

there is a type mismatch because linq2sql expects a function of the type it created and not the function I am passing in.

0 投票する
1 に答える
2016 参照

c# - 式ツリーのメソッドの式を取得

式ツリーで次のクエリを作成したい:

式の作成方法:

私はすべてを試しましたが、Expression.Call メソッドの Field の MethodInfo を取得することさえできませんでした。フィールドは、DataRowExtentions の拡張メソッドです。

これには Expression.Call() を使用する必要がありますか? MethodInfo を取得するにはどうすればよいですか? それを行う簡単な方法はありますか?

私は試した :

ParameterExpression dataRow = Expression.Parameter(typeof(DataRowExtensions), "dataRow"); Expression left = Expression.Call(dataRow, typeof(DataRowExtensions).GetMethod("Field"));

しかし、うまくいきません。


IQueryable tempResults 内のデータに対して動的フィルターを作成したいと考えています。

ユーザーは、tempResults のデータに「Where」式を追加する GUI のチェックボックスをオンにします。ユーザーが「Column」を選択すると、ColumnName = "Column" の DataRows を提示したいと考えています。

そのため、where 式を作成する必要があります。しかし、私は MethodInfo のことにとてもこだわっています。私もこれを試しました:

しかし、それも機能しません。

それを行う他の方法はありますか?