所以我有一个使用实体框架 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