Rumah >pembangunan bahagian belakang >C++ >Bagaimana Menggabungkan Ekspresi Logik Dalam C# Ekspresi?
Apabila anda mempunyai dua ungkapan jenis
, anda mungkin perlu menggunakan pengendali logik (seperti dan, atau, atau tidak) untuk menggabungkannya. Artikel ini membincangkan pelbagai kaedah untuk mencapai matlamat ini.
Expression<Func<bool>>
contoh parameter yang sama
Jika kedua -dua ungkapan menggunakan yang sama, gabungannya mudah:
ParameterExpression
Ini juga terpakai untuk menafikan satu operasi:
<code class="language-csharp">var body = Expression.AndAlso(expr1.Body, expr2.Body); var lambda = Expression.Lambda<Func<bool>>(body, expr1.Parameters[0]);</code>Contoh parameter yang berbeza
<code class="language-csharp">static Expression<Func<bool>> Not<T>( this Expression<Func<bool>> expr) { return Expression.Lambda<Func<bool>>( Expression.Not(expr.Body), expr.Parameters[0]); }</code>Jika ungkapan menggunakan contoh parameter yang berbeza, anda boleh menggunakan
untuk menggabungkan:
Kaedah ini juga boleh digunakan untuk dan Invoke
.
<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>kaedah umum
OrElse
Not
Untuk menangani kedua -dua situasi ini, satu kaedah umum dapat mengesan parameter mana yang sepadan dan pilih kaedah gabungan yang sesuai:
dari .net 4.0,
menyediakan mekanisme untuk membina ekspresi serasi EF:<code class="language-csharp">static Expression<Func<bool>> AndAlso<T>( this Expression<Func<bool>> expr1, Expression<Func<bool>> expr2) { ParameterExpression param = expr1.Parameters[0]; if (ReferenceEquals(param, expr2.Parameters[0])) { return Expression.Lambda<Func<bool>>( Expression.AndAlso(expr1.Body, expr2.Body), param); } return Expression.Lambda<Func<bool>>( Expression.AndAlso( expr1.Body, Expression.Invoke(expr2, param)), param); }</code>
Dengan memilih kaedah yang konsisten dengan adegan khusus anda, anda dapat menggabungkan ekspresi logik dengan berkesan dalam contoh .
Atas ialah kandungan terperinci Bagaimana Menggabungkan Ekspresi Logik Dalam C# Ekspresi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!