无法将lambda表达式转换为&#39; System.Collections.Generic.IEnumerator <t>&#39;因为它不是委托类型

时间:2016-03-14 17:08:12

标签: c# linq generics lambda

我的原始搜索是&#34;模拟dbsets不会返回所有条目&#34;我发现了一个似乎描述我问题的条目。

DbSet mock, no results while calling ToList secondly

但是,该解决方案使用以下语法

q.Setup(m => m.GetEnumerator()).Returns( () => queryableData.GetEnumerator() );

这给了我这个编译错误 &#34;无法将lambda表达式转换为&#39; System.Collections.Generic.IEnumerator&#39;因为它不是代表类型&#34;

其他搜索建议我添加使用我已经拥有的语句:

using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data;

这是我的方法(我使用的是RhinoMocks,另一张海报使用的是Moq,但我不认为这是我的问题)

private static IDbSet<T> GetDbSetTestDouble<T>(List<T> data) where T : class
    {
        IQueryable<T> queryable = data.AsQueryable();

        IDbSet<T> dbSet = MockRepository.GenerateMock<IDbSet<T>, IQueryable>();

        dbSet.Stub(m => m.Provider).Return(queryable.Provider);
        dbSet.Stub(m => m.Expression).Return(queryable.Expression);
        dbSet.Stub(m => m.ElementType).Return(queryable.ElementType);

        // Cannot convert lambda expression to type 'System.Collections.Generic.IEnumerator<T>' because it is not a delegate type
        dbSet.Stub(m => m.GetEnumerator()).Return( () => queryable.GetEnumerator());
    }

2 个答案:

答案 0 :(得分:3)

由于错误试图告诉您,.Return需要返回一个值(在本例中为IEnumerator),而不是lambda。

答案 1 :(得分:0)

您必须在此处使用Generic Enumeration。请参阅以下链接。

EF6 Mocking derived DbSets