Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membina Klausa Dynamic WHERE dalam LINQ untuk Menapis Data Berdasarkan Input Pengguna?
Klausa WHERE Dinamik dalam LINQ: Mencipta penapis bersyarat
Dalam pertanyaan LINQ, selalunya perlu melaraskan klausa WHERE secara dinamik berdasarkan input pengguna atau pembolehubah masa jalan. Sebagai contoh, pertimbangkan kotak semak borang yang menapis data berdasarkan input pengguna dalam pertanyaan LINQ yang diluluskan sebagai Kamus
Bina penapis dinamik:
Untuk memasang klausa WHERE dinamik, kami boleh memanfaatkan fleksibiliti ungkapan lambda LINQ. Dengan menggunakan kaedah ".Where()" kita boleh menggabungkan berbilang kriteria penapis berdasarkan kamus yang disediakan. Untuk setiap pasangan nilai kunci, kami membina predikat untuk menyemak sama ada atribut sepadan dengan nilai yang ditentukan.
Contoh:
<code class="language-csharp">var q = from c in db.ProductDetail where c.ProductGroupName == productGroupName && c.ProductTypeName == productTypeName // 在此处插入动态过滤器 select c; foreach (var kvp in filterDictionary) { // 为每一对键值对创建一个 lambda 表达式 Expression<Func<ProductDetail, bool>> predicate = (p => kvp.Key == null || p.GetType().GetProperty(kvp.Key).GetValue(p) != null && (kvp.Value == null || kvp.Value.Contains( p.GetType().GetProperty(kvp.Key).GetValue(p).ToString()))); // 将谓词链接到查询 q = q.Where(predicate); } q = q.OrderBy(c => c.ProductTypeName);</code>
Predikat pautan:
Dalam senario di mana berbilang penapis perlu digunakan secara berurutan, seperti penapisan julat tarikh, kami boleh merantai klausa ".Where()" tambahan untuk memperhalusi syarat pertanyaan. Pendekatan ini membenarkan penapisan dinamik berdasarkan parameter yang ditentukan pengguna.
Kod sampel:
<code class="language-csharp">var votes = db.Votes.Where(r => r.SurveyID == surveyId); if (fromDate != null) { votes = votes.Where(r => r.VoteDate.Value >= fromDate); } if (toDate != null) { votes = votes.Where(r => r.VoteDate.Value <= toDate); }</code>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membina Klausa Dynamic WHERE dalam LINQ untuk Menapis Data Berdasarkan Input Pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!