use*_*695 9 c# linq entity-framework-core ef-core-3.1
我有以下课程:
public class Employee
{
public string Name {get; set;}
...
}
Run Code Online (Sandbox Code Playgroud)
以及 EF Core 2.1 中的 LINQ 查询
Employee GetEmployeeByName(string name) {
return Context.Employee.Where ( w =>String.Compare(w.Name, name, true) == 0).FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
转换为Net Core EF 3.1后,出现错误。
无法翻译 LINQ 表达式。以可翻译的形式重写查询,或者通过插入对
AsEnumerable()、AsAsyncEnumerable()、ToList()或 的调用显式切换到客户端评估ToListAsync()
我必须将查询更改为
Employee GetEmployeeByName(string name) {
return Context.Employee.Where ( w =>w.Name.ToLower() == name.ToLower()).FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
如果您需要进行不区分大小写的字符串比较,建议 (AFAIK) 使用 EF.Functions扩展,它将转换为正确的 SQL 语句。
你的例子变成这样(使用Like):
using Microsoft.EntityFrameworkCore;
Employee GetEmployeeByName(string name) {
return Context.Employee.Where(w => EF.Functions.Like(w.Name, name)).FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
这翻译成类似的东西(取决于服务器版本)
SELECT TOP(1) <<list of fields here>> FROM Employee WHERE Name LIKE(@name)
Run Code Online (Sandbox Code Playgroud)
可用的函数取决于EF Core 和底层 DBMS 的版本,但由于您提到了 SQL Server,因此假设您使用“默认”排序规则,上述函数将起作用。相关:MSSQL Server 的 LIKE 运算符是否区分大小写?
| 归档时间: |
|
| 查看次数: |
10294 次 |
| 最近记录: |