MongoDB C#驱动程序的LINQ查询语法是否缺少异步方法?

3
LINQ方法语法确实存在像这样的Async方法:
var peter = await peopleCollection.Find(x => x.Name == "Peter").FirstOrDefaultAsync();

但是在查询语法中不存在这样的选项,如下所示:
var peter = await (from x in collection.AsQueryable()
                   where x.Name == "Peter"
                   select x).FirstOrDefaultAsync(); //COMPILETIME ERROR

这是真的吗?

如果您引用了 Entity Framework 库并使用了 using System.Data.Entity; 声明,那么 FirstOrDefaultAsync() 在编译时存在,但在运行时会出现错误。如果你想进行测试,请注意。


难道不应该是 query = from .....; 然后 peter = await query.FirstOrDefaultAsync() 吗?据我所知,你实际上不会像那样包装一个查询定义。 - Neil Lunn
嗨,Neil Lunn :-) 我将其包装在括号中的原因是因为这样我可以在一个语句中检索对象。你建议的方法也可以达到同样的效果,但那样需要两个语句。除此之外,没有任何区别。我刚刚测试了你建议的方法,FirstOrDefaultAsync() 仍然不存在。 - Assassinbeast
2个回答

11

0
可能你的返回类型是一个IQueryable接口。你应该使用MongoDB.Driver.Linq.IMongoQueryable<T>接口代替它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接