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

概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現(xiàn)多條件動態(tài)查詢。通過創(chuàng)建表達式樹,可輕松構(gòu)建復(fù)雜的查詢條件。
在C#中,可以使用AndAlso和OrElse方法組合兩個Expression<Func<T, bool>>類型的表達式。以下是詳細解釋和實例源代碼:
方法和步驟:
- 使用Expression類創(chuàng)建表達式樹。
- 使用AndAlso和OrElse方法組合兩個表達式。
詳細實例源代碼:
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
// 步驟1:定義Person類
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)建第一個表達式,檢查年齡是否大于等于 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)建第二個表達式,檢查姓名是否為 "John"
Expression<Func<Person, bool>> nameExpression = Expression.Lambda<Func<Person, bool>>(
Expression.Equal(
Expression.Property(parameter, nameof(Person.Name)),
Expression.Constant("John")
),
parameter
);
// 步驟5:組合表達式,要求年齡大于等于 18 且姓名為 "John"
Expression<Func<Person, bool>> combinedExpression = Expression.Lambda<Func<Person, bool>>(
Expression.AndAlso(ageExpression.Body, nameExpression.Body),
parameter
);
// 步驟6:編譯并使用組合后的表達式
var compiledExpression = combinedExpression.Compile();
// 步驟7:創(chuàng)建Person對象并測試
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
}
}在這個例子中,AndAlso方法用于將兩個表達式組合成一個邏輯與的表達式。創(chuàng)建了兩個簡單的表達式來檢查年齡和姓名條件,然后通過AndAlso方法組合成一個新的表達式。最后,使用Compile方法將組合后的表達式編譯為委托,可以用于實際的數(shù)據(jù)測試。
到此這篇關(guān)于C#動態(tài)查詢:巧用Expression組合多條件表達式的文章就介紹到這了,更多相關(guān)C# Expression多條件表達式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在C#中添加I/O延時和持續(xù)時間的實現(xiàn)方法
這篇文章主要介紹了在C#中添加I/O延時和持續(xù)時間的實現(xiàn)方法,文中有相關(guān)的代碼示例供大家參考,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-01-01
WinForm實現(xiàn)為TextBox設(shè)置水印文字功能
這篇文章主要介紹了WinForm實現(xiàn)為TextBox設(shè)置水印文字功能,很實用的一個技巧,需要的朋友可以參考下2014-08-08

