問題タブ [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.
reflection - クラス内のプロパティが AutoMapper によってマップされているかどうかを確認する方法は?
AutoMapper と強力に統合するプロジェクト (完全にオープン ソース) に取り組んでいます。私がすることは、クラス間だけでなく、実行時にAMによって登録されたマッピングを知りたいのですが、必要でない場合は、特定のクラスの特定のプロパティがその時点でマップされているかどうかを知る必要がありますその場合は無視しますが、何らかの方法でそのプロパティの名前または完全なパスを文字列として保存する必要があります。
例えば:
1 - foo.bar (クラス「Foo」のプロパティ「bar」を保持する必要があります) 2 - foo.Bar.Foo.Bar.Name (クラス「Foo」のフルパス「Bar.Foo.Bar.Name」を格納する必要があります) ")
実際、私はそれを行うことができますが、私の実装から逃れることができる特異性があります.
これまでに行ったメソッドを含むクラスは、BitBucket のリポジトリにあります 。
特に、メソッド「CanPassToAutoMapper」と「GetPropertyMap」は少し壊れやすく、エラーが発生しやすいように見えますが、どう思いますか?
entity-framework - OrElseおよびAndAlso式メソッドを使用した場合の例外
プログラムで式ツリーを作成しようとしています。
入力には、次の形式の条件クラスのリストがあります。
Expression
オブジェクトを作成するときExpression
、次の方法ですべての条件に対してを作成します
Filter.ToExpression()メソッドは次のように実装されます
条件が1つしかない場合はすべて機能しますが、静的メソッドの1つを使用して式を結合しようとすると、And
次のようOr
にAndAlso
なります。OrElse
InvalidOperationException
二項演算子Orは、タイプ'System.Func
2[MyObject,System.Boolean]' and 'System.Func
2 [MyObject、System.Boolean]'に対して定義されていません。
少し混乱しています。誰かが例外の理由をよりよく説明し、解決策を提案できますか?
どうもありがとう!
vb.net - エンティティへのLinqを使用したLinq式
少しクリーンアップするために、拡張メソッドで繰り返しコードをラップしようとしています。
私が避けようとしているパターンは、文字列(通常はコントロールのテキスト値)がnull /空であるかどうかをチェックし、そうである場合は、Containsを使用してデータのフィールドと比較することです。明らかに、フィールドは私の拡張機能にハードコードされておらず、オブジェクトタイプもハードコードされていません。
私が持っているものはLinqtoObjectsで完全に機能しますが、一般的なランタイムエラー「LINQtoEntitiesはメソッド'System.String Invoke(GenericQueryHelper.Customer)'メソッドを認識しません。このメソッドはに変換できません。ストア式。」エンティティフレームワークモデルを使用する場合。
これが私が持っているものです:
そして私も試しました:
同じ結果で...
まず、これも可能ですか?使用法を次のようにしたいと思います。
結果をフィルタリングしているので、SQLデータベースに対してこれを実行する必要があります。そのため、メモリ内で実行したくありません。誰か考えはありますか?
linq - Linq To Entities の式ツリー
エンティティのプロパティを指す式と、それを using と比較する定数文字列を取り込む拡張メソッドを作成しようとしています。これはString.Contains
、最初に文字列が null または空であるかどうかをチェックし、次の場合にのみフィルターを適用します。文字列には値があります。ただし、これは式ツリーに手を出すのは初めてなので、何が起こっているのかよくわかりません。また、現在、例外があり、それを修正する方法がわかりません...
私はこれまでのところ:
文字列プロパティを持つエンティティがあるDbContext
場所に対して、次のように呼び出しています。Customer
FirstName
例外は次のとおりです。
何かご意見は?
c# - LINQ 式 さまざまなオブジェクト型で配列を作成する
ユーザー入力からいくつかの解析を行っています。ここでは、特定のタイプである必要がある引数の配列を解析する必要があります。
解析の時点では、各引数がどのタイプであるべきかわかりませんが、任意のタイプに評価できます。そこで、それらをオブジェクトの配列に一時的に格納することにしました。しかし、私がこのようなことをしようとすると:
次の例外が発生します: タイプ 'System.Int32' の式を使用して、タイプ 'System.Object' の配列を初期化することはできません。
つまり、暗黙のボクシングが発生していないためだと思います。だから私はそれを自分で箱に入れます:
これまでのところ、配列内のさまざまなタイプのオブジェクトのリストを取得しました。
しかし、最終的に目的のタイプを取得したら、すべての値を上の配列からそのタイプに変換しようとします (そのタイプは通常 int であるとしましょう)。
これは、expr が実際には文字列「aaaaa」である場合の両方のコマンドのデバッグ ビューです。
さて、ここに私の問題があります。これは例外をスローしません。しかし、expression が最終的にコンパイルされるときはそうなります。つまり、string は int ではありません。
たぶん、これは本当に例外をスローするべきではありません。わかりません。しかし、これは私にはうまくいきません。
これに対する治療法はありますか?
編集:コードは次のようになります。
c# - Moq オブジェクトの期待値を設定するジェネリック メソッドを作成するにはどうすればよいですか?
メソッド M は、P1 と P2 の 2 つのパラメーターを取ります。P2 はデリゲートです。モック オブジェクトに、「メソッド M がパラメーター P1 で呼び出されるたびに、P2 を呼び出して、オブジェクト O をそれに渡します」と伝えたいと考えています。Moqを使用しています。
次のアプローチは機能しますが、少し冗長に見えます。
その最後のビットを汎用ヘルパー メソッドにリファクタリングして、私 (および将来のテスト作成者) が次のようなものを書くだけで済むようにしたいと思います。
大きな問題は、そのヘルパー メソッドの内部には何が入るかということです。これまでのところ部分的に成功していますが、そこまで到達する方法があるかどうか疑問に思っています。
最初の試行 (機能しません)
このメソッドは次のように呼び出すことができます。
結局のところ、Moq は私が Setup メソッドに渡すものを気に入らないのです。「式はメソッド呼び出しではありません」という例外をスローします。
2 回目の試行
このアプローチでは、LINQ 式の操作を行います (これまで行ったことはありません)。
このメソッドはそのように呼び出すことができます。
これは機能し、必要に応じてこのようなものに落ち着くかもしれません。残念ながら、DataCacheMock の間違ったメソッドを誤って呼び出した場合 (int ではなく文字列を取るオーバーロードが含まれている可能性があります)、コンパイル時エラーではなく実行時エラーが発生します。
3 回目の試行
このバージョンは、渡された式からモック オブジェクトを取得するため、ヘルパー メソッドを呼び出すときにモック オブジェクトを 2 回指定する必要はありません。
ただし、このアプローチには、型に関しても同じ問題があります。
私 (および将来のテスト作成者) はおそらく、冒頭で述べた冗長な構文に対処できるでしょう。また、テストが失敗するだけなので、型の安全性が低いものにも対処できるでしょう。ただし、これが Moq で可能かどうかを確認したいと思います。私はここまでウサギの穴に落ちました。:-)
c# - ラムダ式をキャッシュ用の一意のキーに変換する
これに似た他の質問を見てきましたが、実行可能な答えは見つかりませんでした。
次のコードを使用して、linqクエリの結果をキャッシュに保存するための一意のキーを生成しています。
整数またはブール値を含む単純なクエリでは正常に機能するようですが、クエリにネストされた定数式が含まれている場合。
したがって、返されるキーは次のとおりです。
(True AndAlso(Farm.Crops.Any(y =>(value(OzFarmGuide.Controllers.FarmController + <> c__DisplayClassd).slug == y.Slug))AndAlso(Farm.Deleted == False)))
ご覧のとおり、私が渡す作物名は同じ重要な結果をもたらします。クエリを区別できるように、指定されたパラメータの値を抽出する方法はありますか?
y
また、正しい型名を言うように変換するといいでしょう....。
reflection - EF4.1 による動的な Fluent マッピング
いくつかの既存のクラスとカスタム XML マッピング ファイルを操作するデータ モデルを動的に作成したいと考えています。これは、既存のテーブルが多数あり、既存のビジネス クラスが多数あるためです (クレイジーかもしれませんが、わかりません)。
異なる列名を使用するか、既存の列に対応しないプロパティについては、.Ignore() と .HasColumnName() を呼び出したいのですが、動的に実行したいと考えています。
したがって、このような呼び出しを行うことができるようにしたいのですが、リフレクションと Linq.Expressions を使用した XML 構成ファイルに基づいて動的に呼び出しを行いたいです (これは使用する機会がありませんでした)。
また
これが私が試みていることです (最終的には、XML マップを参照して、マップするプロパティと無視するプロパティを決定します)。
しかし、私のラムダ式は正しくありません:
c# - Any() への呼び出しを含む System.Linq.Expressions.Expression オブジェクトを作成する方法
フィルターとして使用できる linq.expressions.expression ステートメントを動的に生成したいと考えています。
Expression に変換したいサンプル Linq クエリを次に示します。
これが私の試みです
手伝ってください。
c# - 関数に Linq 式を渡す
クラスのプロパティ リストを関数に渡したい。プロパティ リストに基づく関数で、クエリを生成します。Linq Select メソッドとまったく同じ機能です。ここでは、これを Ingress データベースに実装します。
例として、
フロントエンドで、このように選択を実行したいのですが、
私のエンティティクラスはこのようなものです
このような Select 関数を呼び出したいのですが、
次に、結果を使用して、Name プロパティと Address プロパティの値を取得できます。
私の Select 関数は次のようになるはずです。
(*これはLinq式を使用して行うべきだと思います。しかし、入力パラメーターと戻り値の型が何であるかわかりません。*)
これは、Linq のような機能を作成する試みです。しかし、私はLinq式の専門家ではありません。
MIT からDbLinqと呼ばれるプロジェクトがありますが、それは大きなプロジェクトであり、それでもそこから役立つものを得ることができませんでした。
誰かがこれを始めるのを手伝ってくれませんか、または誰かがこれについて読むのに役立つリソースをリンクしてくれませんか。