我想建立一个通用的查询机制来访问我的仓库。 我想用Lambda表达式过滤和排序的查询。 我在努力寻找一种方式来传递在通用Lambda表达式的列表,专门针对订单的,并会在这样欣赏的帮助。
编辑:2级的要求,我想满足的,没有暴露的IQueryable超越资源库,但仍然能够进行一些过滤,并在数据库级排序。
为了更好地说明这一点让我告诉你的代码
public class Query<T>
{
public class OrderBy<T>
{
public Expression<Func<T, **int**>> Clause { set; get; } // Order By clause
public bool Descending = true;
}
public Expression<Func<T, bool>> Where { set; get; } // Where clause
public IList<OrderBy<T>> OrderBys { set; get; } // Where clause
public Query()
{
OrderBys = new List<OrderBy<T>>();
}
}
public IEnumerable<Person> FindBy(Query<Person> query)
{
IQueryable<Person> Temp = GetObjectSet();
if (query.Where != null)
Temp = Temp.Where(query.Where);
foreach (var OrderByThis in query.OrderBys)
{
if (OrderByThis.Descending)
Temp = Temp.OrderByDescending(OrderByThis.Clause);
else
Temp = Temp.OrderBy(OrderByThis.Clause);
}
return Temp.ToList<Person>();
}
这是非常好的,但表达<Func键<T,INT >>是不通用的。 我需要能够做的是这样的:
Query<Person> query = new Query<Person>();
Query<Person>.OrderBy<Person> clause1 = new Query<Person>.OrderBy<Person>();
clause1.Clause = m => m.Username;
Query<Person>.OrderBy<Person> clause2 = new Query<Person>.OrderBy<Person>();
clause2.Clause = m => m.DateOfBirth;
query.OrderBys.Add(clause1);
query.OrderBys.Add(clause2);
即加入了许多不同类型的不同字段。
我想必须有这些存储为通用lambda函数的方式,然后在仓库中,然后转换成需要的强类型的lambda函数。
我怎样才能做到这一点?