我有一些代碼根據用戶輸入動態地建立一些搜索標準,導致傳遞給LINQ .Where()方法的Expression<Func<T, bool>>
。當輸入存在時它工作正常,但當輸入是而不是目前,我想創建一個簡單的'返回false';語句,以便不返回任何結果。如何使用C#表達式樹創建一個LINQ友好的'return false'表達式?
下面是我當前的嘗試,但是當它傳遞給.Where()方法時,它會引發NotSupportedException「未知的LINQ表達式'Block'。」
var parameter = Expression.Parameter(typeof(T), "x");
var falseValue = Expression.Constant(false);
var returnTarget = Expression.Label(typeof (bool));
var returnFalseExpression = Expression.Block(Expression.Return(returnTarget, falseValue), Expression.Label(returnTarget, falseValue));
var lambdaExpression = Expression.Lambda<Func<T, bool>>(returnFalseExpression, parameter);
我該如何構建一個可以被LINQ解釋的'return false'表達式?
謝謝,現在答案似乎很明顯。我曾嘗試這種方法,但得到了編譯器錯誤'帶聲明體的lambda表達式不能轉換爲表達式樹' - 我沒有意識到我需要做的就是省略大括號。 –
@LeeD通常會仔細閱讀錯誤並嘗試理解其含義。 – svick