我有一个存储库类,它将QueryConstraints对象作为参数来查询数据存储并返回所需实体的IEnumerable。存储库应该可以防止可能需要很长时间才能处理的查询。 QueryConstraints如下:
public class QueryConstraints<T>
{
public Expression<Func<T, bool>> WhereClause { get; }
public Expression<Func<T, bool>> SortClause { get; }
public int Skip {get;}
public int Take {get;}
...
some other fields
}
当客户端创建QueryConstraints时,它应该将表达式分配给WhereClause和SortClause属性,并将对象传递给要检查和处理表达式的存储库的Find()方法。
我的问题是: 我知道可以使用表达式树来检查表达式的主体。但是,我不知道如何完全实现我的目的。例如,我想阻止没有可用于其字段的索引的查询。我该怎么做?