新增類
#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
測試執行
namespacetest
; 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 表示式。...