Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Membina Klausa Dynamic WHERE dalam LINQ Menggunakan Kamus Penapis?

Bagaimana untuk Membina Klausa Dynamic WHERE dalam LINQ Menggunakan Kamus Penapis?

Patricia Arquette
Lepaskan: 2025-01-14 08:32:46
asal
240 orang telah melayarinya

How to Build a Dynamic WHERE Clause in LINQ Using a Dictionary of Filters?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan