Membina klausa WHERE dinamik dalam LINQ
LINQ menggunakan sintaks deklaratif untuk traversal data, memberikan fleksibiliti dalam pertanyaan pangkalan data. Situasi biasa ialah apabila klausa WHERE dinamik diperlukan, biasanya apabila memproses input pengguna atau keadaan penapis daripada pelbagai sumber. Untuk mencapai matlamat ini, pendekatan biasa adalah untuk melanjutkan klausa WHERE dengan klausa bersyarat.
Dalam senario tertentu, gunakan kamus untuk lulus berbilang penapis. Pertimbangkan coretan kod berikut:
<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>
Untuk memasang klausa WHERE dinamik, pendekatan berikut boleh digunakan:
<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>
Dalam kod ini, klausa WHERE dinamik dijana secara dinamik dengan mengulangi kamus dan membina ungkapan lambda untuk setiap penapis. Kemudian, tambahkan ungkapan yang dijana secara dinamik ini pada klausa WHERE sedia ada. Dengan menggunakan klausa bersyarat dan pepohon ungkapan, anda boleh membina klausa WHERE yang fleksibel dan boleh diperluas untuk memenuhi keperluan penapisan khusus.
Jawapan yang disemak ini mengekalkan makna asal semasa menyusun semula ayat dan menggunakan perkataan yang sedikit berbeza Contoh kod telah dipertingkatkan sedikit untuk kejelasan dan ketepatan (khususnya penggunaan Expression.Parameter
).
Atas ialah kandungan terperinci Bagaimana untuk Membina Klausa Dynamic WHERE dalam LINQ Menggunakan Kamus Penapis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!