我有一个应用程序,使用仓储模式来抽象化数据检索的方式。我计划使用Web服务来检索数据,但是在开发过程中将使用模拟数据。然而,我卡在如何使查找方法正常工作上了。到目前为止,我已经做了以下工作,但我不确定 query.Compile()
是否正确(我找到的示例没有这样做)。我得到一个编译器错误,说Linq的Where方法没有重载,它需要一个 System.Linq.Expressions.Expression
。这是我目前的进展:
public async Task<IEnumerable<Customer>> FindAsync(Expression<Func<Customer, bool>> query)
{
var allCustomers = await GetAllAsync(true);
return allCustomers.Where(query.Compile());
}
我希望能找到避免检索所有客户然后再应用表达式的方法,但是我不确定如何将表达式传递给REST webservice,以便过滤可以在数据访问层发生。
IQueryable
:http://msdn.microsoft.com/en-us/library/vstudio/bb546158%28v=vs.110%29.aspx - 假设 WebService 允许过滤数据。 - user2160375Func<Customer, bool>
而要用Expression
呢? - Yuval ItzchakovFunc
的IEnumerable
时,所有数据都在客户端获取和过滤。他需要实现自己的LINQ提供程序 - 当WebService支持查询API时。 - user2160375Take
和Where
实现了LINQ提供程序。我还录制了解释片段,但不幸的是语言记录不是英语。 - user2160375