我想编写一个通用扩展方法,它将根据用户定义的过滤器返回一组指定的对象,其签名如下:
public static IEnumerable<T> GetObjects<T>(this ObjectSet<T> os, string fieldName, object value) where T : EntityObject {}
当然,我们可以更改签名以处理多个过滤器,但让我们首先关注单字段过滤器。
你将如何编写一个这样的 Linq 查询?
我想编写一个通用扩展方法,它将根据用户定义的过滤器返回一组指定的对象,其签名如下:
public static IEnumerable<T> GetObjects<T>(this ObjectSet<T> os, string fieldName, object value) where T : EntityObject {}
当然,我们可以更改签名以处理多个过滤器,但让我们首先关注单字段过滤器。
你将如何编写一个这样的 Linq 查询?
您需要动态构建 lambda 表达式并Queryable.Where
使用此表达式调用 os:
public static IQueryable<T> GetObjects<T>(this ObjectSet<T> os,
string fieldName, object value)
{
var param = Expression.Parameter(typeof(T), "x");
var body = Expression.Equal(
Expression.PropertyOrField(param, fieldName),
Expression.Constant(value, value.GetType()));
var lambda = Expression.Lambda<Func<T, bool>>(body, param);
return os.Where(lambda);
}