問題タブ [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.
linq - LINQのExpression.Quoteメソッドの目的は何ですか?
MSDNのドキュメントには次のように記載されています。
Expression.Quote
メソッドExpression型の定数値を持つ式を表すUnaryExpressionを作成します。
Expressionクラスを使用して手動で述語式を作成することにより、LINQクエリで使用する述語式を作成できましたが、Expression.Quoteの必要性に遭遇したことはありません。
いつ、なぜこれを使用しますか?それらを持っている私が見たLINQ式から、それらは値を追加せずに既存の式をラップしているように見えます。
Quoteメソッド/ノードタイプの目的は何ですか?
c# - 親/子クエリでの仕様パターンとしてのLinq式の使用
Linqプロバイダーが効率的なデータベースクエリを生成するためにそれを解析できるように、Linq式として実装された仕様パターンを使用しようとしています。
これが基本的な考え方です。
親/子クエリで動作させるのに苦労しています
c# - 定義時にパラメーターのいずれかがない場合に LINQ 式を変換する方法
アプリケーションに、より一般的なクエリ機能を構築しようとしています。私がやりたいのは、与えられた述語式が、後で渡される値を持つ queryable に適用できるオブジェクトを定義することです。
以下のコードは、問題を理解するのに十分なほどうまくやろうとしていることを示しているはずです。詳細を知りたい場合はお知らせください。
ありがとう!
linq - Select ステートメントで式を呼び出す - LINQ to Entity Framework
select 句を実行しようとしたときに作成した既存の Expression 構築クラスを使用しようとしていますが、Select の式ツリーに式をアタッチする方法がわかりません。次のことを試しました。
しかし、明らかに、Entity Framework が Invoke を SQL メソッドにマップできないというエラーが表示されます。これを回避する方法はありますか?
参考までに、EntitiesExpressionHelper.MakeTranslationExpression<T>(string name, int languageID) は次と同等です。
編集:これを達成するには ExpressionVisitor を使用する必要があることは理解していますが、ExpressionVisitor を使用して MemberInitExpression を変更する方法がわからないため、これを達成する方法を誰かが知っている場合はお知らせください。
c# - Linq から Nhibernate - 2 つのリストを比較する
2 つのリストがあり、一致するものがあるかどうかを知る必要があります。使用してみましrequest.Interests.Intersect(x.Post.Tags.Split(' ')).Count() > 0
たが、エラーが発生します
System.NotImplementedException : メソッド Intersect が実装されていません。
そこで、bool を返す再帰関数を試してみました。そして、関数呼び出しが単に無視されているかのようです。
これが私の機能です
私のlinq式の関連部分は次のようになります。
GenerateInteresExpression にブレークポイントがある場合、一時停止しません。その場で式を構築するために再帰関数を構築しようとしましたが、linq 式を連鎖させる方法がわかりません。linq to nhibernate の動的 linq でこれを達成する方法についてのアイデアはありますか?
.net - 一部のオブジェクトプロパティがUnaryExpressionで、他のプロパティがMemberExpressionであるのはなぜですか?
文字列プロパティ名の質問ではなくラムダを使用してモデルプロパティを選択し、次のようにコレクションにプロパティを追加したいという答えに基づいて行動します。
Include
メソッドに次のコードを記述しました。
ただし、コードを実行すると、一部のラムダが期待どおりにMemberExpression値を生成したのに対し、他のラムダはUnaryExpression値を生成したことがわかりました。ラムダを使用してすべてのプロパティを追加する前に、コードの最初の行を次のように変更する必要がありました。
すべてのプロパティは、POCOビジネスオブジェクトの「単純な」タイプ、つまりstring、DateTime、int、boolなどです。それらは、いくつかのさまざまなDataAnnotations属性で装飾されています。
私の例のラムダの一部がMemberExpression値を生成し、他のラムダがUnaryExpression値を生成する原因は何ですか?私の例では、最初のUnaryExpressionは3行目のDateTimeプロパティにありますが、ブール値のプロパティもUnaryExpressionsになります。
.net-4.0 - MethodBody を式ツリーに変換する
MethodBody (または他のリフレクション手法) を System.Linq.Expressions.Expression ツリーに変換する方法はありますか?
c# - 表現>-あいまいなメソッドシグネチャを処理する方法は?
私は次のようなインターフェース契約を結んでいます:
FooとBarは、FooBar抽象クラスを継承する具象クラスです。
これらのメソッドを呼び出そうとすると、問題が発生します。
プロパティ「UserId」が抽象「FooBar」タイプに存在するため(したがって、FooとBarにも存在するため)、「あいまいな呼び出し」エラーが発生します。これは理にかなっています。
だから、どうすればこれを克服できますか?
呼び出し元のコードからのインテリセンスの観点から、メソッド名は1つしかないため、インターフェイス(オーバーロードされた述語メソッド)の外観が気に入っています。
なぜ私はそのような私のインターフェースを持っているのですか?「Foo」または「Bar」のみを返したいシナリオもあれば、混合バッグが必要なシナリオもあるので、抽象型を返す必要があります。意味がありますか?
とにかく、明らかな質問に-これを回避する方法はありますか?(インターフェイスメソッドの名前を変更する以外)?(したがって、単純さを損なう)
c# - C#強制演算子?
私はこのテストを受けました:
少し奇妙な例外がスローされます。
テスト 'Unit.Web.Bootstrap.AutoMapperFacts.EverythingIsMappedJustFine' が失敗しました:
System.InvalidOperationException :
タイプ 'System.Void' と 'System.Object' の間に強制演算子が定義されていません。
System.Linq.Expressions.Expression.GetUserDefinedCoercionOrThrow(ExpressionType coercionType, Expression expression, Type convertToType)で
...
AutoMapper.DelegateFactory.CreateGet(MethodInfo メソッド) で
残念ながら、これを小規模で再現することはできず、正確に何が起こっているのかわかりません。
強制演算子とは何ですか?
これは役に立つかもしれません。しかし、私は必要な情報ビットを抽出して馬鹿にすることに失敗しています。
c# - LINQ 式を統合または再利用する
LINQ to SQL ステートメントの where 句でファイラーとして使用される LINQ 式があります。私の問題は、LINQ to SQL 式が扱いにくくなり、それに含まれるロジックが複数の場所で DRY に違反することになりました (これは、QA によって発生したバグに取り組んでいるのが 3 回目です)。
以下のような LINQ 式を再利用したり、より小さなサブ式に分解したりする方法はありますか? 私の最大の問題は、式が LINQ to SQL 呼び出しで使用されるため、LINQ to SQL ライブラリがそれらを SQL として表現する方法がわからないため、他のクラスやメソッドを使用できないことです。
理想的には、私ができるようにしたいのは、以下のようなものです。LINQ to SQL は GetStatus() メソッドを表現できないため、機能しません。うまくいけば、それを行うための他の賢い方法がありますか?