Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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# 如何在EFCore中通过异步方法过滤数据?_C#_.net Core_Ef Core 3.1 - Fatal编程技术网

C# 如何在EFCore中通过异步方法过滤数据?

C# 如何在EFCore中通过异步方法过滤数据?,c#,.net-core,ef-core-3.1,C#,.net Core,Ef Core 3.1,我想按ef core筛选数据,并尝试通过返回Task的异步方法筛选用户 但是有了这个代码,我得到了这个错误 CS4010:无法将异步lambda表达式转换为委托类型“Func”。异步lambda表达式可能返回void、Task或Task,它们都不能转换为“Func” 那么,如何通过我的方法过滤我的可查询数据呢?该错误告诉您不能在谓词中使用异步 不幸的是,您需要改变方法,通过内存中的数据进行循环 // Get all data, convert to list List<User> u

我想按ef core筛选数据,并尝试通过返回
Task
的异步方法筛选用户

但是有了这个代码,我得到了这个错误

CS4010:无法将异步lambda表达式转换为委托类型“Func”。异步lambda表达式可能返回void、Task或Task,它们都不能转换为“Func”


那么,如何通过我的方法过滤我的可查询数据呢?

该错误告诉您不能在谓词中使用异步

不幸的是,您需要改变方法,通过内存中的数据进行循环

// Get all data, convert to list
List<User> userRecords = _context.User.ToList();
List<User> availableUsers = new List<User>();
foreach (User userRecord in userRecords)
{
    //Assuming you will always successfully receive a boolean
    if (await _userInterface.CheckUserAvabilityAsync(user, userRecord.Id))
        availableUsers.push(userRecord);
}
return availableUsers;
//获取所有数据,转换为列表
List userRecords=_context.User.ToList();
列表可用用户=新列表();
foreach(userRecords中的用户userRecord)
{
//假设您将始终成功接收布尔值
if(wait_userInterface.checkUserAvabilitySync(user,userRecord.Id))
可用用户推送(userRecord);
}
返回可用用户;

这应该可以解决问题。

那将毫无意义。EF核心是一个ORM。它将LINQ查询转换为SQL。即使是一个简单的函数调用,您发布的内容也无法转换为SQL—如何将对本地方法的调用转换为SQL。至于异步,SQL查询不指定如何检索数据,而是指定数据应该是什么。异步执行在SQL查询中没有任何意义
// Get all data, convert to list
List<User> userRecords = _context.User.ToList();
List<User> availableUsers = new List<User>();
foreach (User userRecord in userRecords)
{
    //Assuming you will always successfully receive a boolean
    if (await _userInterface.CheckUserAvabilityAsync(user, userRecord.Id))
        availableUsers.push(userRecord);
}
return availableUsers;