LINQ 方法语法确实有这样的异步方法:
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
这是真的吗?
如果要测试,一个重要的注意事项:如果您引用了实体框架库并具有使用 System.Data.Entity; 语句,则 FirstOrDefaultAsync() 在编译时存在,但它在运行时会给出和错误。
支持FirstOrDefaultAsync(以及许多其他)。我相信您的问题可能是您没有包括定义扩展方法的MongoDB.Driver.Linq。
测试在这里:https://github.com/mongodb/mongo-csharp-driver/blob/master/tests/MongoDB.Driver.Tests/Linq/MongoQueryableTests.cs#L309。
代码在这里: https://github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB.Driver/Linq/MongoQueryable.cs
可能,您返回的类型是一个 IQueryable 接口。您应该使用MongoDB.Driver.Linq.IMongoQueryable<T>
接口而不是它。