問題タブ [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# - EFでメソッドパラメーターとしてラムダ式を渡す方法
EF式をメソッドパラメータとして渡すにはどうすればよいですか?
私の質問を説明するために、擬似コードの例を作成しました。
最初の例は、今日の私の方法です。この例では、EFとファンシーリトライロジックを利用しています。私がする必要があるのは、Fancy Retry Logicをカプセル化して、より一般的になり、重複しないようにすることです。
2番目の例は、EF式をパラメーターとして受け入れるヘルパーメソッドを使用して、どのようにしたいかを示しています。
これはSQLで行うのは簡単なことですが、強く型付けされたオブジェクトの恩恵を受けることができるように、EFでそれを行いたいと思います。
最初の例:
2番目の例:
c# - 式を使用> Linq には拡張子が含まれています
次の例を使用してExpression
、Contains メソッド内で使用し、EF
.
これを正しく動作させるにはどうすればよいですか?
述語全体を渡すことができることはわかっていますが、問題のエンティティから会社を解決する方法をユーザーに提供してもらいたいだけです。
アップデート
会社エンティティ全体ではなく、companyId を解決することにしました。メモリ内の ID のリストを取得できます。それが IQueryable であるか、単なる配列/IEnumerable である場合は、大騒ぎしません。
ただし、いくつかの奇妙なエラーが発生します。
Extent.Select(o => o).Where(p => (p.Hide = False)).Where(p => (p.Archived = False)).Where(item = の実行中に例外が発生しました> System.Int32[].Contains(item.Development.CompanyId))'. 詳細については、InnerException を参照してください。
内部例外は
引数式が無効です
更新 2
私は本当にやりたいことを反映するようにコードを編集しましたが、これに対する解決策を見つけることができませんでした。
c# - 複数のジェネリックlinq式でグループ化する方法
Linq式を使用してクエリを作成しようとしていますが、複数の列でグループ化しようとしてスタックしています。基本的なコレクションがあるとしましょう。
ラムダ式を使用してこれらをグループ化できることを私は知っています:
ご覧のとおり、これは正しくグループ化されます。
しかし、ここで、グループ化するセレクターのコレクションを受け取り、それがメソッドのパラメーターとして渡され、エンティティータイプがジェネリックであるとします。
メソッドを呼び出す人は誰でも次のように呼び出します。
group-by式を作成するにはどうすればよいですか?
編集
セレクターのセットが必要な理由を明確にするために、上記を更新しました。
編集#2
doLinqのエンティティタイプを汎用にしました。
c# - EF 4.3 で複雑なキーを使用して AddOrUpdate でデータをシードする方法
テストデータを使用して開発データベースをシードしようとしています。
私はcontext.People.AddOrUpdate(p => p.Id, people));
多くの成功を収めて使用しました。
主キーがわからない別のテーブルをシードする必要があります。
たとえば、姓と名の一致に基づいて AddOrUpdate を実行したいと思います。
Expression を正しく記述する方法がわかりません。
明らかに間違っていますが、私が探している解決策を伝えてくれることを願っています.
entity-framework - ラムダ式に苦戦 (VB .net)
SQLで簡単にできる比較的単純なものはあるのですが、ラムダ式を使いこなそうとしていて、苦労しています。
簡単な例を次に示します。基本的に私は2つのテーブルを持っています。
- tblAction (アクション ID、アクション名)
- tblAudit (AuditID、ActionID、削除済み)
tblAudit には、Deleted フラグが 1 に設定された tblAction に関するエントリがある場合があります。
私がしたいのは、tblAudit に削除されたエントリがないアクションを選択することだけです。したがって、SQL ステートメントは次のようになります。
VB.Net の LINQ で上記に相当するものは何ですか? 私は試した:
しかし、これは実際には、tblAction の各エントリが tblAudit にもエントリを持つ必要がある内部結合タイプのシナリオです。データベース マッピングを行うために Entity Framework Code First を使用しています。これを行うことができる方法でマッピングを定義する方法はありますか?
.net - linq式を介してオーバーライドされたプロパティから属性を取得する
GetCustomAttributes()
プロパティで定義された属性を取得するために使用しようとしています。問題は、プロパティがオーバーライドされたものであり、式からオーバーライドされたプロパティを抽出する方法がわからないことです。基本クラスのものを取得する方法しか理解できません。
ここにいくつかのコードがあります
MyAttribute
今、私は抽象クラスから抜け出そうとしています。しかし、私はそれを介して取得する必要がありExpression
ます。これは私が使用しているものです:
残念ながらatts
、空になってしまいます。問題は、クラスの代わりになっmenberType
てしまうことです。したがって、属性を取得しても、何も返されません。Text.Content
Abstract.Content
java - 式ツリーを実行可能なJVMバイトコードにコンパイルする機能を備えたJava用のLinqのような式ライブラリ
System.Linq.Expressions名前空間には、.Net言語で使用されるすべての構造体の多くのExpressionクラスが含まれています。これらのクラスのオブジェクトを使用して式ツリーを構築し、その場でコンパイルして実行することができます。
Javaの世界に、式ツリーを作成し、その場でコンパイルして実行できるようなものはありますか?
非常に簡単な例を示すために、次のようなものを記述できるライブラリが必要です。
ありがとう
ただの更新。私が考えていたことを実行するこのライブラリを見つけました:http://unkrig.de/w/janino。
c# - LINQ 式を別の QueryProvider に渡す
式を受け取り、それを SQL に変換し、SQL データベースにクエリを実行する単純なカスタム QueryProvider があります。
データベースにヒットすることなく取得できるように、頻繁にアクセスされるオブジェクトを格納する QueryProvider に小さなキャッシュを作成したいと考えています。
QueryProvider にはメソッドがあります
キャッシュは、この QueryProvider クラスのフィールドとして存在し、単純な汎用リストです。
List.AsQueryable メソッドを使用し、上記の式を List.AsQueryable の Provider の Execute メソッドに渡すと、期待どおりに動作しません。式がコンパイルされると、最初の QueryProvider が不可欠な部分になるようです。
後続の QueryProvider に式を渡し、必要に応じて式を実行することはできますか?
呼び出しコードは、漠然と次のように見えます。
エラーは返されませんが、同じプロバイダーが何度も呼び出されるループに陥ります。
ここに私がやろうとしていることを示すいくつかのコードがあります:
コレクション:
クエリ:
クエリプロバイダー:
イテレータ:
プログラム:
キリン:
SingleAndDefault などの特殊なケースは除外されます。私が作業したい部分はイテレーターで発生します。そこでは、最初に辞書のクエリプロバイダーを実行する前にリストのクエリプロバイダーを実行します。
2 つの Queryable オブジェクトのうちの 1 つは、データベースまたはその他のものである可能性があります。
c# - C# 式ツリーでコンパイラが生成したクラスを確実に検出する
Linq-to-SQL の行に沿って、C# 式から Javascript へのコンバーターを構築していますが、コンパイラで生成された式ツリーで問題が発生しています。
私が抱えている特定の問題はMemberExpression
、コンパイラによって生成CompilerGeneratedAttribute
されたが、型に指定されていない値を処理することです。
これが私が試してきたことの縮小版です:
ここで、Visual Studio のデバッグ セッションを開いて、これを見つけました (イミディエイト ウィンドウで実行)。
したがって、私がここに持っているのは、カスタム属性を持たない明らかにコンパイラによって生成されたクラスであり、したがってCompilerGeneratedAttribute
! したがって、私のコードはdo other stuff
、意図したときにdo stuff
.
誰かがここで私を助けてくれたら、とても感謝しています。expressionType.Name
可能であれば、 と を のように一致させるような下品なことはしたくありません<>.*__DisplayClass
。