問題タブ [linq-method-syntax]
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.
entity-framework - メソッド構文を使用したLINQジェネリックGroupByおよびSelectBy
私はそれを一般的にしようとしていますが、成功しませんでした。関連する User エンティティを取得しません。
私はそれを試しました:
使用時にエラーが発生します:
c# - .NET Linq ステートメントの問題
Linq と Query の構文は、私の最も苦手なスキルの 1 つです。望ましい結果を得るのに問題があります。
2 つのテーブル/コレクションがあります。1 つは DocumentTypes で満たされ、もう 1 つは Notifications で満たされます。これらは問題を保持するフィールドです。そうでないものは省略しました。
ドキュメントの種類
- ID
- 名前
- サプライヤーID
通知
- ID
- DocumentTypeID
- ユーザーID
- 製品番号
- Last_Sequence
3 つのパラメーターがあります。ユーザー ID、サプライヤー ID、および製品 ID。
そのサプライヤに関連付けられているすべての DocumentTypes のリストを取得するには、supplierID が必要です。次に、それらに関連付けられた通知のリストを取得するために、userID と ProductID が必要です。
次に、これら 2 つのリストに参加する必要があります。すべての通知には、リンク先の documentTypeID があります。特定のドキュメント タイプの通知がある場合、Last_Sequence フィールドを含め、true に設定された新しい bool フィールドを作成する必要があります。
通知がない場合は、Last_sequence を空のままにし、bool を作成して false に設定できます。
したがって、結果はこれらの型を持つオブジェクトのリストになります。
- DocumentTypeID
- DocumentTypeName
- BoolField (これに関連付けられた通知がある場合は true)
- NotificationID (存在する場合のみ)
- Last_sequence (存在する場合のみ)
私がこれまでに持っているもの。
以前のバージョンでは、bool フィールドと documentType 情報を追加するだけで済みました。そのために私はこの声明を出しましたが、必要なものをそれに追加することはできないようです:
私が新しいもののために試したことはこれですが、通知が関連付けられている場合にのみデータが返されます。存在しない場合、その documentType データは返されません。
編集:これは私が試したものの例ですが、うまくいきません。ここでの問題は、n.last_sequence を実行しようとすると n が存在しないことです。
これをどのように解決すればよいのか考えました。最初にすべての適切な DocumentTypes のコレクションを作成し、それを作成した新しいコレクションと結合する必要がありますか?それとも、これを解決するためのより良い方法はありますか?
c# - List 型の 2 つのリストに必要なメソッド構文を使用した Linq クエリ
fullMessagesList から「This is a Lemon」、「This is a Orange」を返すメソッド構文を使用した linq クエリが必要です。別のリストの各テキストについて、contains() を確認する必要があります。
古い学校の foreach ループを使用して記述しましたが、メソッド構文を使用して linq で理解する必要があります。
c# - INNER および OUTER Join を使用した LINQ メソッドの構文
私は3つのクラスを持っていてLINQ methods
、実行するために使用しようINNER JOIN
としていLEFT JOIN
ます. それぞれを個別に実行できますが、構文さえ理解できないため、一緒に実行することはできません。
最終的に、私が書く SQL は次のようになります。
クラス
サンプル
結果を型にしたいGroup
。LEFT JOIN
と の間Section
を正常に実行しましたCourse
が、タイプIQueryable<
a> , which is not what I want, since
Group` のオブジェクトがあります。
私もこれを試しましたが、これはすべてのテーブルでNULL
実行され、ユーザーが何も入力していないため返されます。INNER JOIN
Courses
質問
データベースへの呼び出し回数を最小限に抑えてINNER
とを実行し、タイプ の結果を取得するにはどうすればよいですか?LEFT JOIN
Group
望ましい結果
タイプ のオブジェクトを 1 つ持ちたいのですが、 a に aがあるGroup
限りのみです。また、ユーザーが特定のまたは returnに対して持っているものを返したいです。Group
Section
Courses
Section
NULL
c# - 'Where' メソッド内で三項演算子の条件が無視されています。クエリに対する別のより良いアプローチはありますか?
EF および Linq メソッド構文を使用してデータベースからデータを取得するメソッドを実装しようとしています。このメソッドには 5 つのパラメーター (4 つのリストと 1 つの文字列) があり、各パラメーターはクエリ結果のフィルターとして機能する必要があります。
「Where」メソッド内での三項演算子の使用は、次のコードの一部の式 (1 ~ 4) で機能しますが、式 (5) では、「nameFilter」の文字列値に関係なく、三項演算子を使用して Where 条件が完全に無視されます。式(5)の式(5)は無視されますが!nameFilter.Equals("")
、nameFilterの値が""の場合に条件結果が真になることをデバッグ時に確認しました。
最後に、問題を解決しようとして、表現を変更しました.Where( u => !nameFilter.Equals("") ? u.NAME.ToUpper().Contains( nameFilter.ToUpper() ) : true );
に
.Where( u => nameFilter.Length > 0 ? u.NAME.ToUpper().Contains( nameFilter.ToUpper() ) : true )
そしてそれはうまくいきました。
私は C# と Entity Framework を初めて使用するので、文字列と比較すると、「長さ」と比較して三項演算子が何らかの形で無視され、期待される結果が得られた理由を理解したいと思います。Entity Framework でこのクエリを実行する別の方法はありますか?
前もって感謝します。