Rumah > pembangunan bahagian belakang > C++ > Bagaimana menggabungkan ekspresi logik jenis `ekspresi` di Linq?

Bagaimana menggabungkan ekspresi logik jenis `ekspresi` di Linq?

DDD
Lepaskan: 2025-01-31 06:01:09
asal
520 orang telah melayarinya

How to Combine Logical Expressions of Type `Expression` in LINQ?

Di linq, gabungkan ekspresi logik jenis

Expression<Func<bool>> Linq sering menggunakan ungkapan, ungkapannya adalah perwakilan ekspresi lambda. Apabila memproses ungkapan, dua ungkapan logik sering diperlukan, seperti dan, atau, atau tidak.

Sebagai contoh, pertimbangkan dua ungkapan berikut:

kita mungkin mahu menggabungkan ungkapan ini untuk mendapatkan jenis ungkapan baru yang sama:

<code class="language-csharp">Expression<Func<bool>> expr1;
Expression<Func<bool>> expr2;</code>
Salin selepas log masuk

Ekspresi gabungan dengan parameter yang sama

<code class="language-csharp">// 示例用法(原样无效)
Expression<Func<bool>> andExpression = expr1 AND expr2;</code>
Salin selepas log masuk

jika dan menggunakan parameter yang sama, operasi sangat mudah:

ungkapan parameter yang berbeza dengan kombinasi expr1 expr2 Walau bagaimanapun, jika ungkapan menggunakan parameter yang berbeza, kita harus memberi perhatian kepada cara menggabungkannya. Gunakan untuk mencapai ini:

<code class="language-csharp">var body = Expression.AndAlso(expr1.Body, expr2.Body);
var lambda = Expression.Lambda<Func<bool>>(body, expr1.Parameters[0]);</code>
Salin selepas log masuk

kaedah umum

Serpihan kod berikut menyediakan kaedah yang sama untuk menentukan cara yang paling sesuai untuk menentukan ekspresi gabungan:

Invoke

Langkah berjaga -jaga lain
<code class="language-csharp">static Expression<Func<bool>> AndAlso<T>(
    this Expression<Func<bool>> left,
    Expression<Func<bool>> right)
{
    var param = Expression.Parameter(typeof(T), "x");
    var body = Expression.AndAlso(
            Expression.Invoke(left, param),
            Expression.Invoke(right, param)
        );
    var lambda = Expression.Lambda<Func<bool>>(body, param);
    return lambda;
}</code>
Salin selepas log masuk

dalam .net 4.0 dan versi yang lebih tinggi, anda boleh menggunakan kelas untuk membuat ungkapan keselamatan EF:

Output Revied ini mengekalkan imej asal dan memberikan penjelasan yang lebih ringkas dan mudah dibaca mengenai coretan kod

Atas ialah kandungan terperinci Bagaimana menggabungkan ekspresi logik jenis `ekspresi` di Linq?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan