問題タブ [linqkit]
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#-4.0 - 最初のコードの LINQKit 述語
私はこれを読みました(http://www.albahari.com/nutshell/predicatebuilder.aspx)
これが私のコードです:
最初にコード内の私のサービス:
すべての記録T_Users
: 6548
すべてのレコードの場所code==357
: 26
ただし、常にすべてのレコードが返されます。しかし、なぜ ?
c# - LINQKit で LINQ To Entities を使用しているときにオブジェクト例外をキャストできない
LINQKitを使用して LINQ To Entities 機能を拡張しています。
このコードは、Entity Framework ORMオブジェクトに使用されます (_Context はDbContext、Users - はDBSet ) 。
このコードは次の例外をスローします
タイプ 'System.Linq.Expressions.FieldExpression' のオブジェクトをタイプ 'System.Linq.Expressions.LambdaExpression' にキャストできません
Funcを取り除き、 IsMatchedをGetAllMatchedUsersにハードコーディングすると、この問題が解決します。しかし、Funcを使用して、ビジネス ロジック層からデータ アクセス層にさまざまな選択基準を渡す必要があります。
PS IsMatchedは、もちろん非常に単純化された実現です。
お願い助けて。
vb.net - VB.NET での Linqkit ジェネリック述語
私は最近、すばらしい Linqkit ライブラリに出会いました。ジェネリック述語を使用して、データ マッピング フィールドを含むテーブル全体でユーザーがアクセスできるデータにユーザーをマッピングする関数を作成したいと考えています。(H1L1、H1L2など)
チュートリアル(C# のみ) に基づいて、これは実際に可能であることがわかりますが、行き詰まっています。
これまでのところ、インターフェースを作成しました:
Implements IDataMap
各クラスのプロパティをインターフェイスに追加してマップすることで、操作したいテーブルの Linq クラスを調整しました
。おそらくlinqクラスを拡張する必要がありましたが、今のところ、VSによって生成されたクラスに変更をハードコードしただけです。
しかし、ここからどこへ行くべきか、またはこの関数をどこに配置すればプロジェクトのどこからでもアクセスできるようになるかわかりません。私のテスト機能は基本的です:
最終的には、次のようなことが言えるようになりたいと思っています。
インテリセンスで「mapUserToData」が利用可能であることを確認できる唯一の方法は、関数をLinqクラス内に配置することです...しかし、それは一般的ではありません。コード ビハインドに関数をインラインで配置すると、intellisense は "mapUserToData" 関数をテーブルのメソッドとして認識しません。これは、C# と VB.NET の言語/名前空間の違いによるものでしょうか?
私は .Net と Linq の両方の初心者ですので、あらかじめご容赦ください。
次を使用して、アドホック ベースで linqkit 述語関数を正常に使用できます。
しかし、必要になるたびにデータ マッピング ロジックを複製する余裕はありません。誰かが助ける方法を知っているなら、私は永遠に彼らの借金を負うことになります!
c# - 述語以外の呼び出し式を展開するには?
私は LINQKit を発見したばかりで、複雑な linq クエリの一部を除外したいという一般的な問題の解決策を提供しているように見えることに非常に満足しています。
ただし、すべての例は、where 句の述語を除外する方法を示しています。
これは非常に典型的な使用例ですが、通常は選択のために、他の種類の式も除外したいと考えています。次の部分式があるとします。
LINQKit はこれへの呼び出しを拡張する方法を提供しますか? 私は試した:
これは準拠していますが、LINQKit のエキスパンダーで実行時に失敗します。
スタック トレースは次のように始まります。
これはサポートされていませんか、それとも何か間違っていますか?
c# - EntityFramework と LinqKit を使用してインターフェイス プロパティを照会する
EntityFramework とLinqKitを使用して、SQL に変換される式ツリーを構築しています。また、仕様パターンを使用してクエリを整理します。
ほとんどすべてのドメイン オブジェクトで説明によるクエリを実行する必要がありますが、これらのクラスの一部では、プロパティは「名前」と呼ばれ、他のクラスでは「説明」などと呼ばれます。
したがって、最初は次のようにインターフェイスが定義されていました。
クラスに明示的に実装されたものを使用しようとしたときに問題が発生し、それに対して一般的なクエリを作成しました。
実行時に、EntityFramework はプロパティ get (メソッド呼び出し) を SQL 式に変換できません。
次に、次のようにクラスで Expression を定義しようとしました。
ただし、.Expand() を実行すると、例外がスローされます: タイプ 'System.Linq.Expressions.PropertyExpression' のオブジェクトをタイプ 'System.Linq.Expressions.LambdaExpression' にキャストできません。
次に、LinqKit はローカルで定義された式の展開のみをサポートし (この質問に記載されているように)、それらの問題を解決するために非公式のコードが記述されていることがわかりました (この質問の回答)。
しかし、LinqKit ライブラリを変更して、2 番目の質問で提案された解決策のいずれかを試すと、次のようにスローされ始めました: スコープ '' から参照されるタイプ 'Foo' の変数 'x' が定義されていません。
Foo のインスタンスをまだ持っていないことが原因でしょうか? ジェネリック型パラメーターのみを取得したため、ローカル変数で式を定義できません。クラスに何らかの形で「アタッチ」された静的式として定義する方法があるのではないでしょうか? しかし、それを一般的なクエリで使用することはできません。インターフェイスはありません...
インターフェイスの明示的な実装で定義された式を作成できるように、LinqKit を変更する方法はありますか? または、明示的に実装されたプロパティに対して一般的なクエリを作成する別の方法はありますか? または、他の解決策や検討すべきことはありますか?
そのためにLinqKitも仕様パターンも使用する必要はありませんが、EntityFrameworkは必須です。重要なのは、説明プロパティであるプロパティを「指摘」し、その上で一般的な式を作成することをサポートするインターフェース/その他の方法を持つことです。 .
前もって感謝します!