Gunakan OR logik untuk membina klausa WHERE dinamik dalam LINQ kepada Entiti
LINQ kepada Entiti menggunakan pelaksanaan tertunda untuk membina pertanyaan dinamik. Walau bagaimanapun, pertanyaan ini biasanya menggunakan DAN untuk menyambungkan keadaan WHERE. Untuk melaksanakan logik ATAU, pertimbangkan untuk menggunakan perpustakaan pembina predikat seperti LINQKit.
Gunakan PredicateBuilder LINQKit
Dengan LINQKit, predikat boleh dibina secara dinamik menggunakan PredicateBuildernya. Berikut ialah versi diubah suai bagi kod yang disediakan:
<code class="language-c#">var query = from u in context.Users select u; var pred = Predicate.False<user>(); if (type.HasFlag(IdentifierType.Username)) pred = pred.Or(u => u.Username == identifier); if (type.HasFlag(IdentifierType.Windows)) pred = pred.Or(u => u.WindowsUsername == identifier); return query.Where(pred.Expand()).FirstOrDefault();</code>
Expand()
menggantikan ungkapan panggilan dengan struktur yang lebih mudah yang difahami oleh Rangka Kerja Entiti. Tanpanya, pengecualian akan berlaku semasa pelaksanaan pertanyaan.
Pembina predikat lain
Sebagai alternatif, pertimbangkan untuk menggunakan pembina predikat universal Peter Montgomery: https://www.php.cn/link/cfaedf8d25fee6179bfc4bcb64bbbfbd()`.
Atas ialah kandungan terperinci Bagaimana untuk Membina Klausa Dynamic WHERE dengan OR Logik dalam LINQ kepada Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!