我正在使用Dynamic Linq來查詢我們的數據庫,該字符串是基於用戶輸入的過濾器創建的。在一種情況下,我們需要在兩個字段上執行合併,以便將過濾器應用於結果。在Dynamic Linq中合併
產生的語法將是這個樣子:
(nullableField ?? requiredField) == "foo"
或者,如果使用擴展方法:
(nullableField ?? requiredField).Contains("foo")
動態LINQ的,或者至少是版本目前,我們在我們的項目,不支持coalesce,有沒有可用的實現或關於如何實現我自己的建議?我對錶情很少有經驗,我正在努力創造自己的表情。到目前爲止,下面的代碼適用於我的有限測試,但我不確定我是否已經正確地完成了它。
// ?? operator
Expression ParseCoalesce()
{
Expression left = ParseLogicalOr();
if (token.id == TokenId.DoubleQuestion)
{
NextToken();
Expression expr1 = ParseExpression();
left = Expression.Coalesce(left, expr1);
}
return left;
}
這個代碼的思考:
這是由ParseExpression()叫什麼名字?有沒有更好的方法來做到這一點?
是微不足道的轉換爲'ConditionalExpression'實現它。你的系統是否支持? – Gabe 2012-02-29 15:36:37
@加貝我想它可以。提供類似'(nullableField!= null?nullableField ==「foo」:requiredField ==「foo」)'? – Priz23 2012-02-29 15:43:39