問題タブ [linq-expressions]
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.
c# - Linq式はどのように同等性を決定しますか?
辞書のキーとしてLinq式を使用することを検討しています。ただし、Linq式によって平等がどのように決定されるかわからないため、奇妙な結果が得られるのではないかと心配しています。
式から派生したクラスは、値の同等性または参照の同等性を比較しますか?言い換えれば、
c# - 式を動的に作成する方法> 式からの述語>?
where述語を追加しようとしていますが、私の目標は次と同じ式を作成することです:
次のコードがあります。
これにより、次の出力が作成されます。
ただし、 NameとNamespaceのパラメーターが同じではないため、これは誤りです。式セレクターの 1 つを次のように変更した場合:
出力は次のようになります。
sel1とsel2を使用して有効な式を作成するにはどうすればよいですか?
更新 (2011 年 2 月 28 日)
私は呼び出し式を作成することでそれを解決しました:Expression.Invoke
したがって、ラムダ式 sel1 と sel2 は必ずしも MemberExpression である必要はありません:
vb.net - In Query の Linq 式チェーン構文
式メソッド チェーン構文で複製できないように見えるクエリがあります。「User」と「UserPayment」の 2 つのテーブルがあります。User と UserPayment には 1 対多の関係があります。つまり、1 人のユーザーが複数の UserPayment を持つことができます。
特定の日付に支払いを行ったすべてのユーザーを取得するための構文は何ですか? または、支払いを行ったすべてのユーザーを取得しますか?
また、私はVBで書いていることに注意してください。
ありがとう
c# - 動的LINQ-.NET4バージョンはありますか?
いくつかの検索ルーチンにLINQを使用したいと考えており、動的なwhere句が必要です。したがって、たとえば、ユーザーが都市で検索したり、州で検索したりする場合は、2つの厳密に型指定されたLINQ式を作成し、ユーザーの検索方法に基づいて適切な式を使用する代わりに、動的なLINQWhere<>呼び出しを使用します。 。
だから私はこれをしたいと思います:
それ以外の
personData.Where(p => p.City=="Pittsburgh");
また
personData.Where(p => p.State=="PA");
VisualStudio2008サンプルのDynamicLINQについて話しているScottGuthrieのブログ投稿に出くわしました。これは私が望むことをしているようですが、私の質問は次のとおりです。
- このサンプルライブラリはMicrosoftによってサポートされていますか?
- Scott Guthrieの記事は、VS2008(.NET 3.5)に関するものです。.NET 4のより良いオプションはありますか?たぶん、同じこと(または非常に近いこと)を達成する.NET 4でリリースされたものですか?
前もって感謝します!
c# - linq式から句を削除できますか?
linq式/クエリ演算子からwhere句を追加/削除できるかどうか疑問に思いました。
例:-
後の段階でwhere式を削除することは可能ですか?
前もって感謝します :)
c# - 述語式をログに記録する方法は?
通常、私のリポジトリにはデバッグ目的のロギングステートメントがあり、パラメータの値を確認できます。最近、柔軟性を高めるために述語式を引数として取る汎用リポジトリを作成する道を歩みましたが、リモートで役立つ場所に条件を記録する適切な方法を理解できません。
方法の例:
この時点でBody.ToString()を使用していることがわかりますが、結果はそれほど読みやすくありません。
Parameters [predicate: (fa.SomeId == value(NameSpace.SomeClass+<>c__DisplayClass2).SomeId)]
最終的に私が見たいのは、以下のようなものです。
Parameters [predicate: (fa.SomeId == 1 && fa.Account.Name == "MyName").SomeId)]
本質的に、このログの値は、何かが爆発したときに入力値を知ることができるということです。APIのユーザーに述語を文字列として提供するように強制するこの不足を回避する方法はありますか?
performance - クラスのプライベート プロパティの設定
リフレクションを使用してオブジェクトのプロパティを設定する非常に古いコードがあります。たとえば、次のようなものです。
そのコードを置き換えて高速化することを考えていました。しかし、上記のコードではオブジェクトのプライベート プロパティを設定することもできるため、他にどのようなオプションがあるかわかりません。
質問:
- コンパイルされた式 (System.Linq.Expressions を使用) と生成されたコード (CodeDom / Microsoft.CSharp.CSharpCodeProvider を使用) を使用してプライベート プロパティを設定することはできませんか?
- Reflection.Emit を使用してそれは可能でしょうか?
- マッピング ライブラリ ( AutoMapper、ValueInjecter ) のいずれかがこれに役立ちますか (内部で使用しているテクノロジはわかりません)。
- 他のオプションはありますか?
c# - コンパイルせずに既存の LambdaExpression から LambdaExpression を構築する方法
2 つの LambdaExpressions をコンパイルせずに結合したい。
これをコンパイルすると、次のようになります。
これは明らかに、提供された引数からターゲット式を取得する最速の方法ではありません。また、C# メソッド呼び出しをサポートしない LINQ to SQL などのクエリ プロバイダーとの互換性がなくなります。
私が読んだことから、最良のアプローチはExpressionVisitor
クラスを構築することのようです。ただし、これはかなり一般的なタスクのようです。この種の機能を提供する既存のオープン ソース コード ベースを知っている人はいますか? ExpressionVisitor
そうでない場合、可能な限り一般的なものにするためにアプローチする最良の方法は何ですか?
c# - Func とは暗黙的に式に変換>?
ここで何が起こっているのかわかりません:
これらの行は両方ともコンパイルされます。
しかし、これはしません:
LambdaExpression
orには、デリゲートを式に変換する暗黙の演算子がないExpression<TDelegate>
ため、割り当てを機能させるには、何か他のことが起こっている必要があります。それは何ですか?
entity-framework-4.1 - Entity Framework は CompiledQuery を使用しますが、ランタイム フィルター値を許可します
面倒な LINQ-to-SQL データ レイヤーをエンティティ フレームワークでリファクタリングしようとしています。モデルの背後にあるデータベース スキーマは大きく、典型的なクエリには 20 から 30 のインクルードが含まれる場合があります。EF は、このようなクエリに対して大量の SQL ステートメントを生成します。これまでで最大のものは 4,000 行ですが、それでもタイムリーに実行されるため、問題にはなりません。
問題は、EF がクエリを生成するのに最大 4 秒または 5 秒かかるということです。これを克服するために、CompileQuery を使用しました。問題は、既存の L2S データレイヤーに、ユーザー入力に応じてクエリに適用できるフィルターが多数あることです。これらのフィルターの単一の値は、実行時に設定する必要があります。
以下のコードは、最初の静的値がクエリにコンパイルされるため機能しませんが、私がやろうとしていることを示しています。
コンパイルされたクエリにフィルター式を含め、クエリの実行時にフィルター式に値を設定できる方法はありますか?