【发布时间】:2015-04-18 16:39:37
【问题描述】:
我正在尝试编写一个通用过滤器。 这个过滤器几乎用于我的数据库中的每个表。我需要一个通用的 Equals 过滤器,这样我就可以应用到我的所有表中,而无需到处重复我的代码
:我有以下代码:
public static IQueryable<T> ApplyFilterModel<T>(this IQueryable<T> source, FilterDTO filterModel)
{
var type = typeof(T);
if(filterModel.SelectedCompanyId != 0)
{
var property = type.GetProperty("iCompanyId");
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
var resultExp = Expression.Call(typeof(Queryable), "Equals", new[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));
source = source.Provider.CreateQuery<T>(resultExp);
}
return source;
}
type.GetProperty("iCompanyId"); iCompanyId 将始终是 Int32。
所以当我调试并到达这一行时:
var resultExp = Expression.Call(typeof(Queryable), "Equals", new[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));
我收到此错误:
我在这里做错了什么?
如果iCompanyId == filterModel.SelectedCompanyId,我需要过滤Input IQueryable
这就是我调用过滤器的方式:
telematicDevices.ApplyFilterModel(model.FilterDTO);
telematicDevices 是数据库中的 IQueryable(实体框架)
【问题讨论】:
标签: c# asp.net-mvc generics iqueryable