動態拼接Lambda表示式2

2022-03-22 15:18:14 字數 3125 閱讀 5926

新增類

#region lambda expression 拼接方式1

//////expression表示式樹

/// public

class

lambdaparameterebinder : expressionvisitor

//////

過載引數訪問的方法,訪問表示式樹引數,如果字典中包含,則取出

/// ///

表示式樹引數

///protected

override

expression visitparameter(parameterexpression node)

return

base

.visitparameter(node);

}public

static expression replaceparameter(dictionarymap, expression exp)

}//////

表示式數的lambda引數的拼接擴充套件方法

/// public

static

class

lambdaextension

).todictionary(p => p.s, p =>p.f);

var secondbody =lambdaparameterebinder.replaceparameter(parametermap, second.body);

return expression.lambda(merge(first.body, secondbody), first.parameters);

}//////

expression表示式樹lambda引數拼接--false

/// ///

///public

static expressionbool>> false() => f => false

;

//////

expression表示式樹lambda引數拼接-true

/// ///

///public

static expressionbool>> true() => f => true

;

//////

expression表示式樹lambda引數拼接--and

/// ///

//////

///public

static expressionbool>> and(this expressionbool>> first, expressionbool>> second) =>first.compose(second, expression.and);

//////

expression表示式樹lambda引數拼接--or

/// ///

//////

///public

static expressionbool>> or(this expressionbool>> first, expressionbool>> second) =>first.compose(second, expression.or);

}#endregion

#region lambda expression 拼接方式2

//////表示式數的lambda引數的拼接擴充套件方法擴充套件類

/// public

class

lambdaexpressionparameter : expressionvisitor

//////

建構函式

/// ///

public

lambdaexpressionparameter(parameterexpression parameterexpression)

//////

替代方法

/// ///

///public

expression replace(expression expression)

//////

過載引數訪問的方法,處理引數表示式

/// ///

///protected

override

expression visitparameter(parameterexpression node)

}//////

表示式數的lambda引數的拼接擴充套件方法

/// public

static

class

lambdaexpressionextend

//////

expression表示式樹lambda引數拼接--or

/// ///

//////

///public

static expressionbool>> or1(this expressionbool>> first, expressionbool>>second)

//////

expression表示式樹lambda引數拼接--not

/// ///

//////

public

static expressionbool>> not1(this expressionbool>>expression)

}#endregion

測試執行

namespace

test

; expression

int, bool>> expression = t => true

; expression = expression.and1(t => t > 2

); expression = expression.and1(t => t < 8

);

var ds =grades1.asqueryable().where(expression).tolist();

foreach (var item in

ds) ");

}console.read();}}

}

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...

動態建立 Lambda 表示式

作為 delegate 的更深度進化,lambda 讓我們的 顯得更加簡潔和優雅,但同時也面臨乙個問題,就是如何依據外部條件動態構建乙個 lambda 表示式。或許你會奇怪這個需求是如何產生的 首先,lambda 在 dlinq 中承擔了以往 t sql 的部分角色 其次,在資料庫設計中,我們往往需...

動態建立 Lambda 表示式

首先我們看乙個簡單 lambda 表示式的構成。i i 5 在這個表示式中,i 被稱為 parameter,i 5 是 body。我們可以對 body 進行更進一步的分解,那麼 i 5 分別包含引數 i 操作符 以及乙個常數 5 所有這些通過特定順序的組合,從而構建乙個完整的 lambda 表示式。...