ExpressionTree學習筆記

2022-02-17 15:05:57 字數 2312 閱讀 7268

這段時間需要制定自定義查詢條件,感覺有必要學習expressiontree。

學習參考資料:

public

class

people

public

string email

public

int cityid

}

listpeople = new list,

new people(),

new people(),

new people()

};

在list中根據name排序

1、如何將已經生成的expression與分頁機制聯起來?設想是:將查詢條件變成json格式,在頁面端顯示string,儲存到分頁的data屬性中,再從後台分解出json。

目前已成功。

後端生成json字串:

viewbag.searchcondition = jsonconvert.serializeobject(searchcondition);

前端使用json字串:@}

@ajax.actionlink(i.tostring(), "

action

", "

controller

", new , new ajaxoptions )

後端解析json字串

searchdevicecondition searchcondition = jsonconvert.deserializeobject(jsonsearchcondition);

2、and與andalso的區別

andalso對應"&&"

3、expression.equals()相等操作,型別不匹配的問題

var exmaintaininfoid = expression.property(expression.property(param, "

maintaininfo

"), "

maintaininfoid");

var searchmaintaininfoid =expression.convert(expression.constant(searchcondition.maintaininfoid), exmaintaininfoid.type);

var equalmaintaininfoid = expression.equal(exmaintaininfoid, searchmaintaininfoid);

searchcondition.maintaininfoid中的型別為int?型,而param=>param.maintaininfoid型別為int型,直接用expression.equals()會提示資料不匹配,無法操作的錯誤。

解決辦法是利用expression.convert()將int?型轉換成int型別。

4、enum操作方法

4.1需要用到enumtype本身

expression searchmaintainresult = expression.constant( searchcondition.maintainresult, typeof

(maintainresultenum));

expression exmaintainresult = expression.property(param, "

maintainresult");

expression equalmaintainresult = expression.equal(exmaintainresult, searchmaintainresult);

利用expression.constant(, type)中的第二個引數type,將該值設為enumtype.

4.2需要用到enumtype中的值

var maintainlevel = (int

)searchcondition.radiomaintainlevel;

expression searchmaintainlevel =expression.constant(maintainlevel);

exmaintainlevel = expression.property(exmaintainlevel, "

maintainlevelclass");

expression equalmaintainlevel = expression.equal(exmaintainlevel, searchmaintainlevel);

比如enumtype中的項設為int=1,需要用到「1」的值,先轉換成int型。

Expression Tree 上手指南 (三)

上回 我們說到手工解析expression tree,以便獲得其中的邏輯或者執行我們自定義的語義動作。這種做法擴充套件了c 語言的威力,讓我們可以用c 的語法來做更多的事情,例如linq to sql。今天我們要學習一種相反的做法,手工建立表示式樹,然後讓.net來解析它。這是一種強大的動態程式設計...

學做事,先學做人

經理很關照我,我很感謝經理。其實,有乙個好的領導,只要好好幹,他是一定會知道的。但是,要改變客戶的看法,看來還真的很難。在客戶面前不可以太謙虛,太過謙虛,他們反覺得我們無能。做事先做人,一點都沒錯啊。感覺自己太嫩了,這一切還得慢慢磨練。希望多看數,多學習,多仔細觀察生活,觀察周圍成功的人,不斷提高自...

B 學密碼學真的得學程式

b 學密碼學真的得學程式 time limit 1000msmemory limit 65536kb64bit io format lld llu submit status practice sdutoj 2464 description 話說,上次zyj同學最終在眾位瑪麗亞的幫助下搞定了那個神奇...