LINQ での動的な WHERE 句の構築
LINQ はデータ トラバーサルに宣言構文を使用し、データベース クエリに柔軟性を提供します。一般的な状況は、動的な WHERE 句が必要な場合で、通常はユーザー入力またはさまざまなソースからのフィルター条件を処理する場合です。これを実現するための一般的なアプローチは、条件句を使用して WHERE 句を拡張することです。
特定のシナリオでは、辞書を使用して複数のフィルターを渡します。次のコード スニペットを考えてみましょう:
<code class="language-csharp">public IOrderedQueryable<productdetail> GetProductList(string productGroupName, string productTypeName, Dictionary<string, List<string>> filterDictionary) { var q = from c in db.ProductDetail where c.ProductGroupName == productGroupName && c.ProductTypeName == productTypeName // 在此处插入动态过滤器 orderby c.ProductTypeName select c; return q; }</code>
動的な WHERE 句を組み立てるには、次のアプローチを使用できます。
<code class="language-csharp">if (filterDictionary != null) { foreach (var filter in filterDictionary) { string fieldName = filter.Key; foreach (string value in filter.Value) { var innerWhereClause = Expression.Lambda<Func<ProductDetail, bool>>( Expression.Equal(Expression.Property(Expression.Parameter(typeof(ProductDetail), "c"), fieldName), Expression.Constant(value)), Expression.Parameter(typeof(ProductDetail), "c")); q = q.Where(innerWhereClause); } } }</code>
このコードでは、ディクショナリを反復処理し、フィルターごとにラムダ式を構築することによって、動的な WHERE 句が動的に生成されます。次に、この動的に生成された式を既存の WHERE 句に追加します。条件句と式ツリーを使用すると、特定のフィルタリング要件を満たす柔軟で拡張可能な WHERE 句を構築できます。
この改訂された回答は、元の意味を維持しながら、文を言い換え、若干異なる表現を使用しています (特に Expression.Parameter
の使用法)。
以上がフィルターのディクショナリを使用して LINQ で動的な WHERE 句を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。