だから私はEntity Framework、LINQを使って構築しているクエリを持っています。検索パラメーター、および検索されるパラメーターのタイプによって異なります。
次のような関数を作成しました。
public static IQueryable<T> WhereInt<T>(this IQueryable<T> query, string propertyName, string contains)
{
var parameter = Expression.Parameter(typeof(T), "type");
var propertyExpression = Expression.Property(parameter, propertyName);
MethodInfo method = typeof(string).GetMethod("First");
var someValue = Expression.Constant(contains, typeof(string));
var containsExpression = Expression.Call(propertyExpression, method, someValue);
return query.Where(Expression.Lambda<Func<T, bool>>(containsExpression, parameter));
}
次のように使用されます。
WhereInt(DCs, searchfield, search);
searchfield
ユーザーID、ユーザー名、整数、または文字列である可能性があり、理想的には次のことを行います。
searchfield.value == search.toInt32()
一種の特徴。
DateTime
タイプも検索可能にしたいです。多分私はそのために作るでしょうWhereDateTime
。
エラーが発生しますvar containsExpression = Expression.Call(propertyExpression, method, someValue);
これは文字列では問題なく動作しますが、次のエラーで失敗します:
Value cannot be null.
Parameter name: method