在我的代码,我想使我的存储库的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<>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top