前言
時光荏苒,2023年不覺中已成過去。2021剛剛開頭,新的開始本應意氣風發、本應有會當凌絕頂豪情壯志,再不濟也該「鴻圖霸業談笑間」,且不管一入江湖是不是歲月摧的灑脫。很不幸,有些事情就是會突入其來,搞得你觸不及防,什麼心情都沒有。但是我居然還是寫下了這篇部落格。。。。。。嗯,總算是有地方表達以我糟糕心情了。
本來是想解決一下合併兩個expression>型別的表示式的問題,比如:
expression> exp1 = t => t.updatetime; expression> exp2 = t => new ;
合併為乙個表示式:expression> exp1 = t => new ;
之前嘗試過一些辦法(比如下圖方法1和方法2,但是都失敗了)也請教過一些大佬,都沒有解決這個問題。於是我只能繞過這個問題用其他方法去實現了業務需求(在這裡丟擲這個問題,也希望能有人幫我解惑)
退而求其次
我通過解析出來表示式中指定的屬性也能滿足我的需求,下面是我的實現方式:
1如何使用private
static listselectmembers(expression properties)2;
9return
newarrmembers;10}
11else
1218
else
1928
return
null;29
}30}31 }
1下面附上一些實用的擴充套件public
override task updateasync(t model, expressionobject>>properties)
210 model.updatedtime =datetime.now;
11return
base
.updateasync(model, properties);
12 }
1總結縱然此時你的內心是千瘡百孔,萬般無奈,那又怎樣,你還想繼續生活嗎?那就只能繼續前向,繼續拼搏,努力讓自己更加強大。所以該做的事情還是要做,加油。using
system;
2using
system.collections.generic;
3using
system.dynamic;
4using
system.linq;
5using
system.linq.expressions;
6using
system.reflection;78
namespace
syspetro.core.extensions935
///36
///合併表示式 expr1 or expr2
37///
38///
39///
40///
41///
42public
static expressionbool>> or(this expressionbool>> expr1, expressionbool>>expr2)
4356
///57
///取反表示式
58///
59///
60///
61///
62public
static expressionbool>> not(this expressionbool>>expr)
6370
///71
///獲取表示式屬性列表
72///
73///
74///
75///
76public
static listselectmembers(this expressionobject>>expr)
7780
private
static listselectmembers(expression properties)81;
88return
newarrmembers;89}
90else
9197
else
98107
return
null
;108
}109
}110
}111
}112 }
LINQ 表示式樹 Expression
在 linq to objects 中,擴充套件方法需要將乙個委託型別作為引數,這樣就可以將 表示式賦予引數。達式也可以賦予expression型別的引數。expression型別指定,來自於 表示式的表示式樹儲存在程式集中。這樣,就可以在執行期間分析表示式,並進行優化,以便於查詢資料來源。下面看看...
LINQ 表示式樹 Expression
在 linq to objects 中,擴充套件方法需要將乙個委託型別作為引數,這樣就可以將 表示式賦予引數。達式也可以賦予expression型別的引數。expression型別指定,來自於 表示式的表示式樹儲存在程式集中。這樣,就可以在執行期間分析表示式,並進行優化,以便於查詢資料來源。下面看看...
EXpression 表示式目錄樹
表示式樹 前面n 1的是乙個表示式 最後乙個是乙個表示式 一直拆開拆到最後 繼承expressionvisitor的類 可以重寫獲取到表示式樹的方法進行擴張和改寫 委託是編譯成乙個方法 表示式樹不是的 是一種資料結構 但是通過exp.compile 方法編譯後就是乙個委託 能進行compile 的只...