基於Linq表示式做的乙個簡單的表示式生成器

2022-05-14 18:56:54 字數 2271 閱讀 1181

using

system;

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個變數。如果使用者的變數名長度大於乙個字母,則只取第乙個字母當作...