C#動(dòng)態(tài)查詢(xún)之巧用Expression組合多條件表達(dá)式的方法和步驟

概述:在C#中,通過(guò)`Expression`類(lèi)、`AndAlso`和`OrElse`方法可組合兩個(gè)`Expression<Func<T, bool>>`,實(shí)現(xiàn)多條件動(dòng)態(tài)查詢(xún)。通過(guò)創(chuàng)建表達(dá)式樹(shù),可輕松構(gòu)建復(fù)雜的查詢(xún)條件。
在C#中,可以使用AndAlso和OrElse方法組合兩個(gè)Expression<Func<T, bool>>類(lèi)型的表達(dá)式。以下是詳細(xì)解釋和實(shí)例源代碼:
方法和步驟:
- 使用Expression類(lèi)創(chuàng)建表達(dá)式樹(shù)。
- 使用AndAlso和OrElse方法組合兩個(gè)表達(dá)式。
詳細(xì)實(shí)例源代碼:
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
// 步驟1:定義Person類(lèi)
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
// 步驟2:創(chuàng)建Expression參數(shù)
ParameterExpression parameter = Expression.Parameter(typeof(Person), "p");
// 步驟3:創(chuàng)建第一個(gè)表達(dá)式,檢查年齡是否大于等于 18
Expression<Func<Person, bool>> ageExpression = Expression.Lambda<Func<Person, bool>>(
Expression.GreaterThanOrEqual(
Expression.Property(parameter, nameof(Person.Age)),
Expression.Constant(18)
),
parameter
);
// 步驟4:創(chuàng)建第二個(gè)表達(dá)式,檢查姓名是否為 "John"
Expression<Func<Person, bool>> nameExpression = Expression.Lambda<Func<Person, bool>>(
Expression.Equal(
Expression.Property(parameter, nameof(Person.Name)),
Expression.Constant("John")
),
parameter
);
// 步驟5:組合表達(dá)式,要求年齡大于等于 18 且姓名為 "John"
Expression<Func<Person, bool>> combinedExpression = Expression.Lambda<Func<Person, bool>>(
Expression.AndAlso(ageExpression.Body, nameExpression.Body),
parameter
);
// 步驟6:編譯并使用組合后的表達(dá)式
var compiledExpression = combinedExpression.Compile();
// 步驟7:創(chuàng)建Person對(duì)象并測(cè)試
var person1 = new Person { Name = "John", Age = 20 };
var person2 = new Person { Name = "Alice", Age = 25 };
Console.WriteLine(compiledExpression(person1)); // 輸出 True
Console.WriteLine(compiledExpression(person2)); // 輸出 False
}
}在這個(gè)例子中,AndAlso方法用于將兩個(gè)表達(dá)式組合成一個(gè)邏輯與的表達(dá)式。創(chuàng)建了兩個(gè)簡(jiǎn)單的表達(dá)式來(lái)檢查年齡和姓名條件,然后通過(guò)AndAlso方法組合成一個(gè)新的表達(dá)式。最后,使用Compile方法將組合后的表達(dá)式編譯為委托,可以用于實(shí)際的數(shù)據(jù)測(cè)試。
到此這篇關(guān)于C#動(dòng)態(tài)查詢(xún):巧用Expression組合多條件表達(dá)式的文章就介紹到這了,更多相關(guān)C# Expression多條件表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在C#中添加I/O延時(shí)和持續(xù)時(shí)間的實(shí)現(xiàn)方法
這篇文章主要介紹了在C#中添加I/O延時(shí)和持續(xù)時(shí)間的實(shí)現(xiàn)方法,文中有相關(guān)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-01-01
WinForm實(shí)現(xiàn)為T(mén)extBox設(shè)置水印文字功能
這篇文章主要介紹了WinForm實(shí)現(xiàn)為T(mén)extBox設(shè)置水印文字功能,很實(shí)用的一個(gè)技巧,需要的朋友可以參考下2014-08-08
c#語(yǔ)言使用Unity粒子系統(tǒng)制作手雷爆炸
這篇文章主要為大家介紹了Unity的粒子系統(tǒng)由粒子發(fā)射器、粒子動(dòng)畫(huà)器、粒子渲染器組成,通過(guò)使用一或兩個(gè)紋理多次繪制,創(chuàng)造一個(gè)混沌的效果,通過(guò)復(fù)習(xí)粒子系統(tǒng)做一個(gè)手雷和實(shí)彈投擲現(xiàn)場(chǎng)2022-04-04

