欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#條件拼接Expression<Func<T, bool>>的使用

 更新時(shí)間:2022年02月21日 10:15:15   作者:風(fēng),停下  
本文主要介紹了C#條件拼接Expression<Func<T, bool>>的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

使用代碼

特別注意 :拼接條件時(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#配置文件中自定義塊節(jié)點(diǎn)的方法

    c#配置文件中自定義塊節(jié)點(diǎn)的方法

    在.netcore中我們非常方便獲取配置文件節(jié)點(diǎn)參數(shù),但是在非.netcore下一般 我們是使用中方法,本文我們將給大家詳細(xì)介紹c#配置文件中自定義塊節(jié)點(diǎn)的方法,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-10-10
  • 解決WPF繪制矢量圖形模糊的問(wèn)題

    解決WPF繪制矢量圖形模糊的問(wèn)題

    這篇文章介紹了WPF繪制矢量圖形模糊問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 利用unity代碼C#封裝為dll的步驟分享

    利用unity代碼C#封裝為dll的步驟分享

    這篇文章主要給大家介紹了關(guān)于利用unity代碼C#封裝為dll的相關(guān)資料,文中通過(guò)圖文將實(shí)現(xiàn)的方法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • C#實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能

    C#實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能

    給大家分享用C#寫出一個(gè)計(jì)算機(jī)功能的全部代碼分享,有興趣的朋友可以跟著做一下。
    2018-03-03
  • 詳細(xì)介紹C#之文件校驗(yàn)工具的開(kāi)發(fā)及問(wèn)題

    詳細(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秒

    這篇文章主要介紹了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#多線程編程中的鎖系統(tǒng)(三)

    C#多線程編程中的鎖系統(tǒng)(三)

    這篇文章主要介紹了C#多線程編程中的鎖系統(tǒng)(三),本本文主要說(shuō)下基于內(nèi)核模式構(gòu)造的線程同步方式、事件、信號(hào)量以及WaitHandle、AutoResetEvent、ManualResetEvent等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C#實(shí)現(xiàn)簡(jiǎn)易多人聊天室

    C#實(shí)現(xiàn)簡(jiǎn)易多人聊天室

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)易多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C#自定義集合初始化器

    C#自定義集合初始化器

    這篇文章介紹了C#自定義集合初始化器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#實(shí)現(xiàn)延時(shí)并自動(dòng)關(guān)閉MessageBox的方法

    C#實(shí)現(xiàn)延時(shí)并自動(dòng)關(guān)閉MessageBox的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)延時(shí)并自動(dòng)關(guān)閉MessageBox的方法,非常實(shí)用的功能,需要的朋友可以參考下
    2014-08-08

最新評(píng)論