問題タブ [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 に答える
990 参照

linq - Queryable.OfType はどのように機能しますか?

重要問題は、「Queryable.OfType は何をするのか」ではなく「そこにあるコードはどのようにそれを達成するのか」です。

Queryable.OfType を振り返ると、(いくつかのクリーンアップ後) が表示されます。

だから、私がこれをまっすぐに持っているかどうか見てみましょう:

  1. リフレクションを使用して、現在のメソッド (OfType) への参照を取得します。
  2. MakeGenericMethod を使用して、現在のメソッドの型パラメーターをまったく同じものに変更することにより、まったく同じ新しいメソッドを作成します。
  3. その新しいメソッドへの引数は、source ではなく source.Expression になります。これは IQueryable ではありませんが、すべてを Expression.Call に渡すので、問題ありません。
  4. Expression.Call を呼び出し、メソッド (変ですか?)インスタンスnullとして渡し、クローン化されたメソッドをその引数として渡します。
  5. その結果を CreateQuery に渡し、結果をキャストします。これは、全体の中で最も健全な部分のようです。

このメソッドの効果は、型が TResult またはそのサブタイプの 1 つと等しくない値を返すことを省略するようプロバイダーに指示する式を返すことです。しかし、上記の手順が実際にこれをどのように達成するかわかりません。IQueryable<TResult> を返すメソッドを表す式を作成し、そのメソッドの本体を単純にソース式全体にして、型を見ないようにしているようです。IQueryable プロバイダーが、選択されたタイプ以外のレコードを黙って返さないことが単純に期待されるのでしょうか?

上記の手順は何らかの点で間違っていますか、それとも実行時に観察される動作がどのように発生するかわかりませんか?

0 投票する
2 に答える
1165 参照

c# - Linq2SQL "or/and" 演算子 (ANDed / ORed 条件)

「Things」というテーブルから選択するためにいくつかの条件を適用する必要があるとしましょう (不明なカウントと性質)

条件がわかっている場合は、次のように記述できます

しかし、その Where 条件をプログラムで作成する必要がある場合、AND 条件を適用する方法を想像できます。

ORed条件はどうですか?注: 結合、一意、またはその他のコストのかかる操作は実行したくありません。アドホックに記述したかのようにクエリが生成されることが望まれます。

前もって感謝します。


添加:

PredicateBuilder:式の述語を動的に構成する

0 投票する
4 に答える
315 参照

.net - Linq2SQLまたは条件間でLinq2SQLを保持する方法は?

テーブルから2つのセットを選択する必要があるとしましょう:「Things」

unionまたは、コストを回避するために1つのステートメントを作成する必要があります。

問題は、クエリオプティマイザが式をcondition2のみにトリミングしているように見えることです。

condition1condition2の間の優先順位を維持する方法

実際の回避策の例は次のとおりです。

編集:

例はオートコンプリートリストを取得することです:

  • 入力:str
  • 出力:で始まるstrものと含むものstr(重複なし)

別の例:ThingTags3つのプロパティを持つものを選択する:

  • ThingID
  • UserID
  • TagID

存在する場合はパラメータが等しいものを選択するという条件の下でThingTag、それぞれに対して1つだけを選択します。それ以外の場合は、最初に選択します。TagIDUserIDThingTagTagID

まだ私と一緒に ?そう願っています:)


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

c# - 翻訳のないLinq2SQL式のソリューション

翻訳のない式に翻訳を提供する方法はありますか?

double.parse()のように

0 投票する
2 に答える
5010 参照

java - Java 式ツリー

.netのLINQの基礎となる式ツリーに相当するものはありJVMますか? コード構造のような LINQ を実装したいと考えScalaています。また、独自の式ツリー ライブラリを作成する必要があるかどうか疑問に思っています。

更新: linq に相当するもの自体には興味がありません。.net には、実行時にコードを動的にコンパイルし、コードから呼び出すことができるようにする式ツリー ツールの大規模なセットがあります。私が引き受けたいプロジェクトは、データベースとは関係ありません。式ツリーは、データを操作するコードを簡単に記述する方法を提供します。

ライブラリがない場合、私の他のオプションは、バイトコードを発行するライブラリを作成することだと思います。

0 投票する
6 に答える
4243 参照

python - プログラムでPythonバイトコードを生成する方法はありますか?

Pythonインタープリターをハックして、小さなDSLを作成してみたいと思います。この理論的なコード(LINQ式ツリーと同様)のようなことを実行できるモジュールはありますか?

それとも、Pythonソースコードを生成する方が簡単でしょうか?これは、C、SWIG、またはCythonを使用することで簡単にできますか?

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

c# - C#, Linq to Sql: Why can I not use an expression to filter SubEntities?

I have made myself an ExpressionBuilder class that helps me put together expressions that can be used as a predicate when doing Linq to Sql queries. It has worked great. However, I just discovered Expressions can only be used to filter on Tables, and not on EntitySets??Why on earth is this the case?

For example if I have Company and an Employee with a Salary. I could create these two expressions:

I would then expect to be able to do the following, however it only partially works:

Also, if I do a ep.Compile() it compiles, but then I get an error when running the query.

Why is this the case? Am I missing something? I don't find this logical. Can I fix this somehow? Or do you have a good workaround?

I know that I in this case could just use Where(x => x.Name.StartsWith("John")) instead, but the problem is that the expressions I need are not that trivial. They are longer strings of AndAlsos and OrElses.

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

linq - Linq to EF Expression Tree / Predicate int.Parse の回避策

Enquiry という名前の linq Entity があります。これには、string DateSubmitted というプロパティがあります。

特定の日付範囲内に DateSubmitted がある Inquiry に対して IQueryable を返す必要があるアプリを作成しています。

理想的には、次のようなものを書きたいと思います

明らかに、Linq to EF は int.Parse を認識しないので、述語を返す Expression メソッドで目的を達成できると思いますか???

私は PredicateBuilder をいじっていろいろと調べてきましたが、これを解決しようとして脳みそを揚げることに成功しました。確かに、エンティティに別のプロパティを追加してそこで変換することはできますが、これを本当に理解したいと思います。誰かが私の頭脳を揚げない例/リンクを説明または与えることができますか?

前もって感謝します

マーク

0 投票する
9 に答える
2133 参照

.net - .net 4.0 式ツリーの適切な使用例は何ですか?

これは、言語の第一人者である私の同僚に触発されたもので、良い使い方を見つけられないようでした.

これらの概念は、実用的な理由を理解すれば、より簡単に流れていく傾向があることがわかりました。

現時点では、Linq プロバイダーを作成できるようにすることが唯一の目的のように見えますか?

それですか??これには他に何か利点がありますか?

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

f# - 小さな表現のDSLをDLRに基づいて作成しますか、それともF#で手動でロールしますか?

私はスプレッドシートのようなアプリケーションを構築しています。このアプリケーションでは、多くの小さな計算をツリー構造につなぎ合わせる必要があります。これらの計算はユーザー定義であり、ユーザーが実行時にそれらを入力する方法が必要です。

私の現在のアプローチは、F#で小さな「式DSL」を作成することです。ここでは、FParsecを使用して入力を解析し、識別された共用体に基づいて構文ツリーを構築してから、式を評価できます。これはかなりうまくいきます。

ただし、代わりにDLRに基づいて言語を検討することを考えています。この道を進むことの利点はありますか(入力を解析し、自分の代わりにScripting.ASTのものを使用してASTを生成し、DLRに計算の実行を処理させます)?

それぞれの計算はおそらくかなり小さいでしょう。計算間の依存関係は、より高いレベルで処理されます。

DLRが式のCILコードを生成するので、パフォーマンスが向上することを期待できますか、それともオーバーヘッドがそれを使い果たしますか?

(IronPythonのような既存の言語を使用することに関しては、言語構文に多くのスライスアンドダイス演算子と次元処理のものを追加することを計画しているので、おそらく難しいでしょう)