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();
工具類(lèi)
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)文章希望大家以后多多支持腳本之家!
- C#表達(dá)式樹(shù)Expression動(dòng)態(tài)創(chuàng)建表達(dá)式
- C#表達(dá)式樹(shù)Expression基礎(chǔ)講解
- 帶你一文了解C#中的Expression
- C# 表達(dá)式目錄樹(shù)Expression的實(shí)現(xiàn)
- C#簡(jiǎn)單實(shí)現(xiàn)表達(dá)式目錄樹(shù)(Expression)
- 淺談c#表達(dá)式樹(shù)Expression簡(jiǎn)單類(lèi)型比較demo
- C# 表達(dá)式樹(shù)Expression Trees的知識(shí)梳理
- C#之Expression表達(dá)式樹(shù)實(shí)例
相關(guān)文章
C#實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
給大家分享用C#寫(xiě)出一個(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-07
C# 獲取某個(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-09
C#實(shí)現(xiàn)延時(shí)并自動(dòng)關(guān)閉MessageBox的方法
這篇文章主要介紹了C#實(shí)現(xiàn)延時(shí)并自動(dòng)關(guān)閉MessageBox的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-08-08

