你如何通过传递一个IQueryable对象创建一个IEnumerable的一个表达式的执行?
-
20-08-2019 - |
题
在我的代码,我想使我的存储库的IQueryable。以此方式,选择的标准将是一个LINQ表达式树。
现在,如果我想嘲笑我的仓库中theorie这是很容易的:只实现我的仓库界面(这也是一个IQueryable的对象)
我的模拟仓库实现将是唯一一个在内存中的集合,但我的问题是:你知道来实现我的模拟的IQueryable的接口一个简单的方法,将查询传输到我的内存中的集合(IEnumerable的)
感谢您的响应,
<强> 有些精密 强>
我的库的客户对象将使用我的库是这样的:
变种结果=从MyRepository条目,其中entry.Product == “SomeProduct” 选择条目;
什么ToList或AsEnumerable是执行查询并返回结果作为列表或作为IEnumerable的。但是,我必须实现的IQueryable接口上我的库,利用该变换的表达在一个呼叫到IEnumerable的对象IQueryProvider。
<强> 解决方案 强>
的溶液的实施委派调用的IQueryable到我的收藏inmemory与AsQueryable已
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
}
解决方案
使用 AsQueryable已你的嘲弄。现在,他们可查询,你可以像对待其他任何可查询。
其他提示
可以使用该扩展方法
.ToList<>
不隶属于 StackOverflow