[解決済み] Linq:where節に条件を条件付きで追加する
2022-09-08 05:15:38
質問
次のようなクエリを持っています。
(from u in DataContext.Users
where u.Division == strUserDiv
&& u.Age > 18
&& u.Height > strHeightinFeet
select new DTO_UserMaster
{
Prop1 = u.Name,
}).ToList();
年齢や身長などの様々な条件を、このクエリを実行するメソッドに提供されたかどうかに基づいて追加したいのです。すべての条件には、ユーザー部門が含まれます。年齢が提供された場合、それをクエリに追加したいと思います。同様に、もし身長が提供されたなら、それも追加したい。
もしこれがSQLクエリを使って行われるのであれば、メインのstrSQLクエリに追加するためにストリングビルダーを使用したことでしょう。しかし、ここでの Linq では、同じクエリを 3 回書き、各 IF ブロックが追加の条件を持つような IF 条件を使用することしか考えられません。これを行うためのより良い方法はありますか?
どのように解決するのですか?
を呼び出さない場合
ToList()
と DTO タイプへの最終的なマッピングを追加することができます。
Where
節を追加していき、最後に結果を構築します。
var query = from u in DataContext.Users
where u.Division == strUserDiv
&& u.Age > 18
&& u.Height > strHeightinFeet
select u;
if (useAge)
query = query.Where(u => u.Age > age);
if (useHeight)
query = query.Where(u => u.Height > strHeightinFeet);
// Build the results at the end
var results = query.Select(u => new DTO_UserMaster
{
Prop1 = u.Name,
}).ToList();
これでもデータベースへの呼び出しは1回だけで、実質的にはクエリを1回で書いたのと同じような効率になります。
関連
-
[解決済み] C# LINQ リスト内の重複を検索する
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] LINQとLambdaでJoin/Whereを実現する
-
[解決済み】Lambda式でOrderBy descending?
-
[解決済み】Entity Framework。このコマンドに関連するオープンなDataReaderがすでに存在します。
-
[解決済み] LINQ を使用して、オブジェクトのリストから一意のプロパティのリストを取得するにはどうすればよいですか?
-
[解決済み] Linqのgroup byのカウントを持つ
-
[解決済み] IQueryableとIEnumerableの違いは何ですか[重複]。
-
[解決済み] 指定された型メンバー 'Date' は LINQ to Entities でサポートされていません。イニシャライザ、エンティティ・メンバ、およびエンティティ・ナビゲーション・プロパティのみです。
-
[解決済み] NHibernateとLINQ to SQLの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] C# LINQ リスト内の重複を検索する
-
[解決済み] IEnumerable<T>のforeachのLINQでの等価性
-
[解決済み】Lambda式でOrderBy descending?
-
[解決済み】LINQ グループバイをディクショナリーオブジェクトに入れる
-
[解決済み】Entity Framework。このコマンドに関連するオープンなDataReaderがすでに存在します。
-
[解決済み] LINQ を使用して、オブジェクトのリストから一意のプロパティのリストを取得するにはどうすればよいですか?
-
[解決済み] LINQを使用してデータをPivotすることは可能ですか?
-
[解決済み] Linqのgroup byのカウントを持つ
-
[解決済み] 指定された型メンバー 'Date' は LINQ to Entities でサポートされていません。イニシャライザ、エンティティ・メンバ、およびエンティティ・ナビゲーション・プロパティのみです。
-
[解決済み] LINQ OrderByとThenByの比較