mas*_*son 12 c# linq iqueryable func
我有一个接口,从Repository模式定义一个存储库:
interface IRepository
{
List<Customer> GetAllCustomers(Expression<Func<Customer, bool>> expression);
}
Run Code Online (Sandbox Code Playgroud)
我已经针对Entity Framework实现了它:
class EntityFrameworkRepository
{
public List<Customer> GetAllCustomers(Expression<Func<Customer, bool>> expression)
{
return DBContext.Customers.Where(expression).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎运作良好,它允许我做类似的事情:
var customers = entityFrameworkRepository.Where(
customer => String.IsNullOrEmpty(customer.PhoneNumber)
);
Run Code Online (Sandbox Code Playgroud)
现在我想要一个InMemoryRepository用于测试和演示目的.我试图创建一个:
class InMemoryRepository
{
Dictionary<int, Customer> Customers {get; set;} = new Dictionary<int, Customer>();
public List<Customer> GetAllCustomers(Expression<Func<Customer, bool>> expression)
{
//what do I put here?
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在上面的代码中看到的那样,我对InMemoryRepository.GetAllCustomers
实现的操作感到困惑.我应该在那里用提供的表达式过滤Customers并返回结果?
我试过了:
return Customers.Where(expression));
Run Code Online (Sandbox Code Playgroud)
但很明显它是期待的,Func<KeyValuePair<int, Customer>, bool>
所以我得到一个编译错误:
错误CS1929'Dictionary'不包含'Where'的定义和最佳扩展方法重载'Queryable.Where(IQueryable,Expression>)'需要类型为'IQueryable'DataAccess.InMemory的接收器
Bac*_*cks 12
试试.AsQueryable()方法:
return Customers.Values.AsQueryable().Where(expression);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3883 次 |
最近记录: |