Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencipta Dinamik ATAU Pertanyaan dengan LINQ kepada Entiti?
Bina pertanyaan ATAU dinamik menggunakan LINQ kepada Entiti
Dalam LINQ kepada Entiti, adalah perkara biasa untuk membuat pertanyaan dinamik menggunakan pelaksanaan tertunda. Walau bagaimanapun, pertanyaan ini biasanya menggunakan DAN untuk menyambungkan keadaan WHERE.
Untuk melaksanakan logik ATAU, iaitu mencari berbilang sifat menggunakan pengecam tunggal, anda boleh memanfaatkan PredicateBuilder LINQKit. Ini membolehkan anda membina predikat secara dinamik:
<code class="language-csharp">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>Kaedah
Expand()
adalah penting kerana Rangka Kerja Entiti tidak dapat mengendalikan ungkapan panggilan. Dengan memanggilnya, anda mengaktifkan kelas pengakses ekspresi LINQKit, yang menggantikan ungkapan ini dengan struktur yang lebih mudah yang difahami oleh Rangka Kerja Entiti.
Tanpa Expand()
, ungkapan dipanggil, menghasilkan pengecualian: "Jenis nod ungkapan LINQ 'Invoke' tidak disokong dalam LINQ kepada Entiti
Satu Lagi Pembina Predikat
Kemudian, pembina predikat am telah dibangunkan yang boleh melaksanakan tugas yang sama tanpa Expand()
:
https://www.php.cn/link/451e10de8e2fb18a9f795679b52dc9f6
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Dinamik ATAU Pertanyaan dengan LINQ kepada Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!