usingsystem;
using
system.collections.generic;
using
system.componentmodel.dataannotations.schema;
using
system.linq;
using
system.linq.expressions;
namespace
model
//////
字段值
/// public
object fieldvalue
//////
操作符
/// public filteroperator operator
//////
構建表示式
/// ///
public funcbool> buildexpression()
else
expression bexp = null
;
switch
(operator)
bexp = expression.call(typeof(filterinfo).getmethod("
contains
", new type ), expleft, consteexp);
break
;
default://
= bexp =expression.equal(expleft, consteexp);
break
; }
var exp = expression.lambdabool>>(bexp, paramexp);
console.writeline(exp);
return
exp.compile();
}//////
用該靜態方法實現like
/// ///
//////
public
static
bool contains(string a, string
b)
return
a.contains(b);}}
//////
操作符列舉
/// public
enum
filteroperator
}
使用該表示式生成器,可以生成簡單的匿名查詢函式來過濾查詢結果。如果我們在專案中用了ef框架,就可以在業務層中通過這個類來構建查詢條件然後傳到dal層來執行,使用方法如下:
//整形陣列查詢
int nums = ;
filterinfo filterint = new filterinfo() ;
var intfunc = filterint.buildexpression();
var r =nums.where(intfunc);
foreach (var i in
r)
console.writeline(
"int array search complete");
//字串陣列查詢
string strarray = ;
filterinfo f = new filterinfo() ;
var fc = f.buildexpression();
strarray.where(fc).tolist().foreach(s =>console.writeline(s));
//物件列表查詢
listorglist = new list();
orglist.add(
new org() );
for (int i = 0; i < 10; i++));}
filterinfo filter = new filterinfo() ;
var func = filter.buildexpression();
var orgsearchlist =orglist.where(func);
foreach (var o in
orgsearchlist)
console.writeline(
"org list search complete
");
乙個蠻複雜的LINQ表示式
最近寫了這麼乙個方法 返回結果大致為 aagp30pmdrvs56nk public string getusbdisksnviadriveletter string strusbdiskdriveletter return null resharper外掛程式提示我這個可以轉變為乙個linq表示式...
lambda表示式的乙個簡單示例
在一些情況下,有些函式在程式中只會被一處地方引用或使用,況且這些函式的內容或邏輯並不複雜,那麼這樣的函式被過多的定義時,會顯得冗餘。那麼一種優化方法是使用lambda表示式,在linq2sql中大量使用了這種表示式。lamda表示式是一種匿名函式,所有 lambda 表示式都使用 lambda 運算...
乙個簡單的表示式解析器
package lipeng.stringdemo 乙個簡單的表示式解析器,這個解析器可以計算由數字 運算子和括號組成的表示式的值,並能處理變數,為了處理簡單,本解析器只支援乙個字母的變數,不區分變數字母的大小寫。因此,最多只能儲存26個變數。如果使用者的變數名長度大於乙個字母,則只取第乙個字母當作...