C#條件拼接Expression<Func<T, bool>>的使用
使用代碼
特別注意 :拼接條件時(shí),所使用到的條件strID,strBir必須是獨(dú)立的
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
給大家分享用C#寫出一個(gè)計(jì)算機(jī)功能的全部代碼分享,有興趣的朋友可以跟著做一下。2018-03-03詳細(xì)介紹C#之文件校驗(yàn)工具的開(kāi)發(fā)及問(wèn)題
目前校驗(yàn)文件使用最多的是MD值和SHA值,不外乎有些使用CRC,前段時(shí)間微軟發(fā)布了VisualStudio正式版,win鏡像,微軟官方給出的校驗(yàn)方式都是校驗(yàn)文件的SHA值。下面詳細(xì)介紹C#之文件校驗(yàn)工具的開(kāi)發(fā)及問(wèn)題,需要的朋友可以參考下2015-07-07C# 獲取某個(gè)時(shí)間的0點(diǎn)0分和23點(diǎn)59分59秒
這篇文章主要介紹了C# 獲取某個(gè)時(shí)間的0點(diǎn)0分和23點(diǎn)59分59秒,文中給大家提到了java 獲取某一日期的0點(diǎn)0分0秒和23點(diǎn)59分59秒,需要的朋友可以參考下2019-09-09C#實(shí)現(xiàn)延時(shí)并自動(dòng)關(guān)閉MessageBox的方法
這篇文章主要介紹了C#實(shí)現(xiàn)延時(shí)并自動(dòng)關(guān)閉MessageBox的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08