2013-08-28 70 views
2

以Northwind爲例。使用動態比較運算符生成lambda表達式(謂詞)

我的目標是使用Linq to Entity動態搜索員工。

我的表達也許:

Expression<Func<Employee, bool>> exp= em => em.EmployeeID > 2; 

在這裏,操作者'>'由組合框在運行時選擇的,並且它可以是 '<', '=', '<>', '含有' 等。

我的問題是,如何使用所選操作符動態構建表達式?

一件重要的事情,不允許選擇性陳述,如'如果'和'開關'。

任何答案表示讚賞。

+0

我不知道爲什麼有人downvoted,爲什麼呢? –

+0

@布拉德克里斯蒂,但不是那個。 –

+0

@RaphaëlAlthaus,這是一個很好的,我會先審查它。謝謝! –

回答

0

如果你的拉姆達內部條件語句看起來不美觀給你,你可以使用函數

Expression<Func<Employee, bool>> exp= em => foo(em, otherParam); 

public static bool foo(Employee em, otherType otherParam) 
{ 
    ... 
} 
+0

不明白,對不起,它如何運行ExpressionType? –

0

我會創建一個具有Func<Employee, bool>和覆蓋ToString方法來表示,該功能是通過運營商的一類。然後,我將使用該類的ObservableCollection作爲您的ComboBoxItemsSource

調用你的類Operator,和你的代碼來執行操作變爲:

var op = dropDown.SelectedItem as Operator; 

if (op != null) 
{ 
    op.Function(employee); 
} 
+0

謝謝,但你能解釋「運營商」的類型?我的情況是ExpressionType。 –