C# 如何转换IQueryable<;T>;收集到IMongoQueryable<;T>;?

C# 如何转换IQueryable<;T>;收集到IMongoQueryable<;T>;?,c#,mongodb,mocking,C#,Mongodb,Mocking,我需要创建一个MongoDB存储库模拟。在我的存储库中有一个方法返回一个IMongoQueryable。我不知道如何创建实现此接口的对象 我真的需要嘲笑这种方法。我查看了IMongoQueryable,看到有一个IQueryable界面,看: public interface IMongoQueryable<T> : IMongoQueryable, IQueryable<T>, IAsyncCursorSource<T> 公共接口IMongoQueryab

我需要创建一个MongoDB存储库模拟。在我的存储库中有一个方法返回一个
IMongoQueryable
。我不知道如何创建实现此接口的对象

我真的需要嘲笑这种方法。我查看了
IMongoQueryable
,看到有一个
IQueryable
界面,看:

public interface IMongoQueryable<T> : IMongoQueryable, IQueryable<T>, IAsyncCursorSource<T>
公共接口IMongoQueryable:IMongoQueryable、IQueryable、iSyncurSource
我想我可以在对象列表的基础上创建一个MongoDB集合,但我没有创建一个实例。如果我创建了
MongoCollection
的一个实例,可能会调用
AsQueryable
方法来返回
imongqueryable
对象


有人有这样做的想法吗?

当我遇到这个问题时,我只需打开Moq的严格模拟,然后继续运行测试模拟方法,直到它停止抛出有关接口的异常为止

var mock = new Mock<IMongoQueryable<Foo>>(MockBehavior.Strict);

//add setup here as you run in to exceptions.

var mockInstance = mock.Object;
var mock=new mock(MockBehavior.Strict);
//在运行到异常时在此处添加安装程序。
var mockInstance=mock.Object;

你说得对。您需要调用
AsQueryable
,但需要从命名空间调用一个:
MongoDB.Driver.Linq.

要访问它,请执行以下操作:

using MongoDB.Driver.Linq; 
PS如果在同一个文件中使用
System.Linq
,请务必小心。您将遇到扩展方法冲突


希望有帮助

我试图实现一个解决方案,但没有实现

var dataQueryable = data.AsQueryable();
        _mongoQueryableMock = new Mock<IMongoQueryable<T>>(MockBehavior.Strict);
        _mongoQueryableMock.Setup(r => r.GetEnumerator()).Returns(data.GetEnumerator());
        _mongoQueryableMock.Setup(r => r.Provider).Returns(dataQueryable.Provider);
        _mongoQueryableMock.Setup(r => r.ElementType).Returns(dataQueryable.ElementType);
        _mongoQueryableMock.Setup(r => r.Expression).Returns(dataQueryable.Expression);
var-dataQueryable=data.AsQueryable();
_MongoQueryAllemock=新模拟(MockBehavior.Strict);
_Setup(r=>r.GetEnumerator()).Returns(data.GetEnumerator());
_Setup(r=>r.Provider).Returns(dataQueryable.Provider);
_Setup(r=>r.ElementType).Returns(dataQueryable.ElementType);
_Setup(r=>r.Expression).Returns(dataQueryable.Expression);
我将我的列表转换为queryable anf,然后将此列表设置为mock。但是当执行wuery时,没有任何数据


可能有什么问题

我想在一些查询中使用一个集合,因为它们非常复杂。在这种情况下,如何设置返回该集合?