linq - 无法使用 Linq、EF Core、Npgsql、Postgres 过滤服务器上的数据
问题描述
我试图用谷歌搜索解决方案,并阅读了文档。因此,我无法以这种方式过滤我的实体:
// Raises the exception
MyUser myUser = _sqlContext.MyUsers
.Where(user => user.UserLogin.ToLower() == userLogin.ToLower())
.ToList()
.FirstOrDefault();
// Raises the exception
MyUser myUser = _sqlContext.MyUsers
.Where(user => user.UserLogin.ToLower() == userLogin.ToLower())
.ToList()
.FirstOrDefault();
// Raises the exception, too
MyUser myUser = _sqlContext.MyUsers
.Where(user => user.UserLogin == userLogin)
.FirstOrDefault();
// Raises the exception, too
MyUser myUser = _sqlContext.MyUsers
.FirstOrDefault(user => user.UserLogin == userLogin);
我收到以下异常:
无法翻译 LINQ 表达式“DbSet .Where(p => p.UserLogin.ToLower() == __ToLower_0)”。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。
用户列表可能非常大,因此在强制客户端过滤ToList()
之前无法调用此选项。Where()
相反,我需要 EF 使用 WHERE 构建查询,并将仅过滤后的值返回给客户端。
我的应用程序使用 ASP.NET Core 3.1 和 EF Core 3.1.5。如果我删除 ToLower(),它也不起作用。我怎样才能使这项工作?
UPD:问题出在 user.UserLogin 的自定义 getter/setter 中。这是模型的一部分:
public class MyUser
{
internal string _userLogin { get; set; }
public string UserLogin
{
get => _userLogin;
set => _userLogin = value.ToLower();
}
}
解决方案
我不得不删除自定义 getter 和 setter 以及 _userLogin 字段。因此,结论 - 除了 Where 或 First(OrDefault) 调用中的简单属性或字段外,应该没有任何内容。
推荐阅读
- react-native - 我是否需要 redux 将 laravel api 与 react native cli 集成
- python - Google Storage // Cloud Function // Python 修改 Bucket 中的 CSV 文件
- azure - 如何解决 Azure 上的报告生成问题?
- github - 我需要获取我所有 github 存储库及其所有合作者的列表
- azure - Azure - 如何将企业应用程序恢复为普通应用程序
- optimization - Gan模型:没有为任何变量提供梯度
- python - 为什么 VSCode 是代码不接受命令
- regex - 为什么我收到错误:Unmatched ( in regex; 由 <-- HERE 标记?
- javascript - 如何限制用户输入不超过 8 个数字?
- pytorch - 交换批处理轴对pytorch中的性能有影响吗?