我需要將第二個表達式「包含」第一個表達式的方式合併爲兩個lambda表達式。 我搜索了很多,但沒有發現任何明確的答案......在另一個lambda表達式中使用lambda表達式
什麼,我試圖做的是以下幾點: 的第一表現「表達式」作爲參數的方法通過,並僅用於定義第二個lambda必須在哪個字段或屬性上運行。
示意,我試圖做到以下幾點:
// simple field selector :
Expression<Func<T, string>> expression1 = obj => obj.field;
// trying to use the field selector in 2nd expression :
Expression<Func<T, bool>> e2 = obj => [[Result of expression1]].Equals("myValue");
換句話說,我想獲得:
Expression<Func<T, bool>> e2 = obj => obj.field.Equals("myValue");
我需要做的是這種方式,因爲它並不總是該方法將被調用,但有許多不同的方法。
我試圖將expression1編譯爲Func<T, string>
以便在expression2中調用此Func,但是因爲我在LinQ中使用此函數,所以我得到一個異常,因爲LinQ不支持Invoke節點類型。
所以我的問題是:有沒有一種方法來結合兩個表達式的主體,請問如何?
感謝提前!
謝謝Chris Eelmaa。您的解決方案在經典環境中運行良好。不幸的是,當我使用LinQ時,我在運行時得到以下System.NotSupportedException:LINQ to Entities不支持LINQ表達式節點類型「Invoke」。 – 2014-10-17 12:47:50
@ Numer_11:更新後。這是你在找什麼? – 2014-10-17 14:24:06
是的!我測試了你的新答案,但仍然有例外。之後,我刪除了.Compile()調用,並將Create方法的返回類型更改爲匹配。最後,這個小小的修改與LinQ完美結合!非常感謝 ! (發佈修改以使其他人明確) – 2014-10-17 15:02:30