2013-03-09 215 views
0

我想在C#中實現動態搜索功能。我的搜索會像如何使用C#和Linq實現動態搜索功能?

Attribute operand Value === > Height > 170 

像上面的搜索列表的推移動態地爲想過濾數據用戶可以添加儘可能多的。和屬性匹配我的列名可能來自SQL DB中的不同表。

實現這種搜索的最佳方式是什麼?我對Linq非常陌生,我試圖去了解http://www.albahari.com/nutshell/predicatebuilder.aspx

我該如何動態構建查詢或什麼是這些易於維護的搜索的最佳方式?

實施例:

Attribute operand Value === > Height = 170 
Attribute operand Value === > Altitude > 40000 
Attribute operand Value === > temperature < 105 

一切都是定製到用戶,並建立在運行時。

實現此目的的最佳方法是什麼?

+0

請您可以在實施的初始階段顯示一些代碼 – 2013-03-09 12:31:29

+0

。只是想向你們確認什麼是最好的方法? – user2067567 2013-03-09 12:50:05

回答

1

檢查this回答在這個問題上關於如何動態地建立一個表達式的例子。

在你的情況,我認爲這樣的事情應該會有所幫助(寫下這個我的頭頂,請原諒語法錯誤)。

PropertyInfo propInfo = typeof(T).GetProperty(Attribute); 
ParameterExpression pe = Expression.Parameter(typeof(Attribute), Attribute); 
Expression right = Expression.Parameter(typeof(int), Value); 
Expression predicateBody = Expression.GreaterThan(left, right); 

Expression<Func<int, bool>> lambda1 = 
       Expression.Lambda<Func<int, bool>>(
        predicateBody, 
        new ParameterExpression[] { numParam }); 

參考 - Expression TreesExpressionType

+0

謝謝。表達樹背後有我的想法。但我該怎麼做在運行時間。在我的情況下,我怎麼知道用戶是否搜索1屬性值或5屬性。只有我知道他點擊了按鈕後? – user2067567 2013-03-11 07:14:03

+0

也可以定製我的問題,如高度> 170所有三個參數將由用戶在運行時輸入 – user2067567 2013-03-11 07:15:03

+0

這需要更多的智能在系統中。你所說的話需要輸入推理1或許多參數將轉換爲「相等」或「進入」操作。但是在其他一些情況下,這些案例的排列可能會令人望而卻步。 – 2013-03-11 07:47:29

相關問題