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
588 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:

Expression<Func<bool>> expr1;
Expression<Func<bool>> expr2;
Salin selepas log masuk

<合> Ekspresi gabungan dengan parameter yang sama

// 示例用法(原样无效)
Expression<Func<bool>> andExpression = expr1 AND expr2;
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:

var body = Expression.AndAlso(expr1.Body, expr2.Body);
var lambda = Expression.Lambda<Func<bool>>(body, expr1.Parameters[0]);
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
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;
}
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!

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