Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带筛选器的MongoDb FindAsync游标始终返回null_C#_Mongodb_Mongodb .net Driver - Fatal编程技术网

C# 带筛选器的MongoDb FindAsync游标始终返回null

C# 带筛选器的MongoDb FindAsync游标始终返回null,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我使用下面的代码按字段名筛选集合。但是result.Current始终为null,而数据存在于MongoCollection中。有什么想法吗 代码 public async Task<IdentityUser> FindByNameAsync(string userName) { if (string.IsNullOrEmpty(userName)) { throw new Argumen

我使用下面的代码按字段名筛选集合。但是
result.Current
始终为
null
,而数据存在于
MongoCollection
中。有什么想法吗

代码

public async Task<IdentityUser> FindByNameAsync(string userName)
        {
            if (string.IsNullOrEmpty(userName))
            {
                throw new ArgumentException("Null or empty argument: userName");
            }

            var filter = Builders<IdentityUser>.Filter.Eq("UserName", userName);
            var result = await _collection.FindAsync(filter);

            if (result != null && result.Current != null && result.Current.Count() == 1)
            {
                return result.Current.Single();
            }

            return null;
        }
对于简单查询(您的案例),您应该使用下一步:

var user = await collection.Find(x => x.UserName != userName).FirstAsync();
您试图使用游标。当查询可以返回大量数据时,这是有意义的,在这种情况下,游标用于下一种方式:

var cursor = await collection.FindAsync(x => x.UserName != userName);
while (await cursor.MoveNextAsync())
{
      var listOfUsers = cursor.Current;
}
PS:
Find
-返回结果,
FindAsync
-在C#8.0中返回游标

,如果方法返回一个
IEnumerable
,您可以在
while
循环中使用
产生返回游标.Current
。更干净和正确的异步。
var cursor = await collection.FindAsync(x => x.UserName != userName);
while (await cursor.MoveNextAsync())
{
      var listOfUsers = cursor.Current;
}