2011-11-08 57 views
1

我想爲數據概覽做一個通用的過濾器,並且我遇到了表達式。在這個例子中,一些表達式是用來做比較:使用表達式來執行字符串操作(包含,startwith,...)

return Expression.Equal(left, right); 
return Expression.GreaterThan(left, right); 
return Expression.GreaterThanOrEqual(left, right); 
return Expression.LessThan(left, right); 
return Expression.LessThanOrEqual(left, right); 
return Expression.NotEqual(left, right); 

對於日期,他們都是我需要的,但是當它涉及到的字符串,用戶將需要其他的過濾器功能的整數值。所以我想添加「包含和啓動」的可能性。但看着「表達」,它並沒有給我這種可能性。我要添加一些自定義表達式,但是我找不到與此相關的任何內容。返回的表達式用於這段代碼:

Expression.Call(typeof (Queryable),"Where",new[] {list.ElementType},list.Expression,Expression.Lambda<Func<T, bool>>(exp, new[] {pe})); 

有人有這樣的經驗嗎?

在此先感謝。

回答

1

ContainsStartsWith不是運營商,他們只是String類的方法,您可以使用Experssion.Call來包含這些用法。

0

您不必添加自定義表達式。只需在實現IQueryable的對象的Where方法中寫入動態linq表達式即可。

像這樣:

... 
using System.Linq.Dynamic; 
... 

string searchKeyword = "ant"; 
IQueryable<Person> collection = GetPersonCollection(); 
collection.Where(string.Format("FirstName.Contains('{0}')"), searchKeyword); 
相關問題