2011-11-08 12 views
1

データ概要の汎用フィルタを作成しようとしています。その例では、いくつかの表現は比較を行うために使用されます。日付と彼らは私が必要とするすべてです整数値については式を使用して文字列演算を実行する(contains、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); 

、それが文字列になると、ユーザーは他のフィルタ機能が必要になります。だから、私は "包含とstartswith"可能性を追加したいと思います。しかし、 "表現"を見ると、それは私にその可能性を与えません。私はいくつかのカスタム式を追加しようとしていましたが、それに関連するものは何も見つかりませんでした。返される式は、次のコードで使用されています。

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); 
関連する問題