Linq 如何将IQueryable对象创建的表达式的执行转移到IEnumerable?
在我的代码中,我想使我的存储库变得易读。这样,选择的标准将是linq表达式树 现在,如果我想在理论上模拟我的存储库,这非常简单:只需实现我的存储库的接口,它也是一个IQueryable对象 我的模拟存储库实现将只是一个内存集合,但我的问题是:您知道一种实现我的模拟的IQueryable接口的简单方法吗?将查询传输到我的内存集合IEnumerable 谢谢你的回复 有些精确 我的存储库的客户端对象将以以下方式使用我的存储库: var result=来自MyRepository中的条目,其中entry.Product==SomeProduct选择条目 ToList或AsEnumerable的作用是执行查询并将结果作为列表或IEnumerable返回。但是我必须在我的存储库上实现IQueryable接口,使用IQueryProvider在调用IEnumerable对象时转换表达式 解决方案 解决方案的实现是使用AsQueryable将对IQueryable的调用委托给我的inmemory集合Linq 如何将IQueryable对象创建的表达式的执行转移到IEnumerable?,linq,ienumerable,expression,iqueryable,Linq,Ienumerable,Expression,Iqueryable,在我的代码中,我想使我的存储库变得易读。这样,选择的标准将是linq表达式树 现在,如果我想在理论上模拟我的存储库,这非常简单:只需实现我的存储库的接口,它也是一个IQueryable对象 我的模拟存储库实现将只是一个内存集合,但我的问题是:您知道一种实现我的模拟的IQueryable接口的简单方法吗?将查询传输到我的内存集合IEnumerable 谢谢你的回复 有些精确 我的存储库的客户端对象将以以下方式使用我的存储库: var result=来自MyRepository中的条目,其中entr
public class MockRepository : IQueryable<DomainObject>
{
private List<DomainObject> inMemoryList = new List<DomainObject>();
#region IEnumerable<DomainObject> Members
public IEnumerator<DomainObject> GetEnumerator()
{
return inMemoryList.GetEnumerator();
}
#endregion
#region IEnumerable Members
IEnumerator IEnumerable.GetEnumerator()
{
return inMemoryList.GetEnumerator();
}
#endregion
#region IQueryable Members
public Type ElementType
{
get
{
return inMemoryList.AsQueryable().ElementType;
}
}
public Expression Expression
{
get
{
return inMemoryList.AsQueryable().Expression;
}
}
public IQueryProvider Provider
{
get
{
return inMemoryList.AsQueryable().Provider;
}
}
#endregion
}
你能使用扩展方法吗
.ToList<>
用在你的模拟上。现在它们是可查询的,您可以像对待任何其他可查询对象一样对待它们。我不知道如何使用它,因为我的查询将在IQueryable对象上的第一个GetEnumerator期间创建一个表达式,并且我的IQueryProvider应将该表达式转换为IEnumerable对象,并将其转换为结果,wich不是ToList方法。我真的希望我能提供更多帮助,但我无法提供帮助。在此之前,如果我理解你的意思,我不能做任何客户打电话询问我的存储库,但多亏了你,我找到了一个好的解决方案!我只需要将我的存储库的IQueryable调用委托给IQueryable对象,该对象表示我的列表,这要感谢AsQueryable。谢谢你!