C#條件拼接Expression<Func<T, bool>>的使用
更新時間:2022年02月21日 10:15:15 作者:風(fēng),停下
本文主要介紹了C#條件拼接Expression<Func<T, bool>>的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
使用代碼
特別注意 :拼接條件時,所使用到的條件strID,strBir必須是獨立的
var predicate = PredicateBuilder.GetTrue<Student>(); predicate = predicate.And(it => it.id.ToString().Contains(strID)); predicate = predicate.And(it => it.Birthday.ToString().Contains(strBir)); predicate = predicate.And(it => it.Sex.ToString().Contains(strSex)); predicate = predicate.And(it => it.Age == 20); var lst = db.Queryable<Student>.Where(predicate).ToList();
工具類
using System;
using System.Linq.Expressions;
namespace WindowsFormsApp1.Tools
{
? ? public static class PredicateBuilder
? ? {
? ? ? ? public static Expression<Func<T, bool>> GetTrue<T>() { return f => true; }
? ? ? ? public static Expression<Func<T, bool>> GetFalse<T>() { return f => false; }
? ? ? ? public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
? ? ? ? {
? ? ? ? ? ? return first.AndAlso<T>(second, Expression.AndAlso);
? ? ? ? }
? ? ? ? public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
? ? ? ? {
? ? ? ? ? ? return first.AndAlso<T>(second, Expression.OrElse);
? ? ? ? }
? ? ? ? private static Expression<Func<T, bool>> AndAlso<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2, Func<Expression, Expression, BinaryExpression> func)
? ? ? ? {
? ? ? ? ? ? var parameter = Expression.Parameter(typeof(T));
? ? ? ? ? ? var leftVisitor = new ReplaceExpressionVisitor(expr1.Parameters[0], parameter);
? ? ? ? ? ? var left = leftVisitor.Visit(expr1.Body);
? ? ? ? ? ? var rightVisitor = new ReplaceExpressionVisitor(expr2.Parameters[0], parameter);
? ? ? ? ? ? var right = rightVisitor.Visit(expr2.Body);
? ? ? ? ? ? return Expression.Lambda<Func<T, bool>>(
? ? ? ? ? ? ? ? func(left, right), parameter);
? ? ? ? }
? ? ? ? private class ReplaceExpressionVisitor : ExpressionVisitor
? ? ? ? {
? ? ? ? ? ? private readonly Expression _oldValue;
? ? ? ? ? ? private readonly Expression _newValue;
? ? ? ? ? ? public ReplaceExpressionVisitor(Expression oldValue, Expression newValue)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? _oldValue = oldValue;
? ? ? ? ? ? ? ? _newValue = newValue;
? ? ? ? ? ? }
? ? ? ? ? ? public override Expression Visit(Expression node)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (node == _oldValue)
? ? ? ? ? ? ? ? ? ? return _newValue;
? ? ? ? ? ? ? ? return base.Visit(node);
? ? ? ? ? ? }
? ? ? ? }
? ? }
}到此這篇關(guān)于C#條件拼接Expression<Func<T, bool>>的使用的文章就介紹到這了,更多相關(guān)C#條件拼接Expression<Func<T, bool>>內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
datatable生成excel和excel插入圖片示例詳解
excel導(dǎo)出在C#代碼中應(yīng)用己經(jīng)很廣泛了,下面講了datatable生成excel、復(fù)制sheet頁、刪除sheet頁、選中sheet頁、另存excel文件、excel中插入圖片等功能2014-01-01
c# 基于GMap.NET實現(xiàn)電子圍欄功能(WPF版)
這篇文章主要介紹了c# 基于GMap.NET實現(xiàn)電子圍欄功能(WPF版),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03

