【发布时间】:2020-06-05 02:57:18
【问题描述】:
我有一个包含 [FirstName] 和 [LastName] 列的用户表。 我正在尝试构建一个搜索功能,以返回满足以下条件之一的用户:
- FirstName == myPattern,或
- 姓氏 == myPattern,或
- FirstName LastName == myPattern
例如,如果我的数据库中有以下用户:
- 杰克一号
- 杰克二
- 杰克三
我希望函数在输入为 Jack 时返回所有这些,但仅在输入为 Jack One
时返回 Jack One我目前有以下代码:
var users = context.User.Where(x => x.FirstName == pattern
|| x.LastName == pattern
|| x.FirstName + " " + x.LastName == pattern)
但这不起作用,因为它被转换为 MySQL 中的以下查询
...WHERE (`p`.`firstName` = 'Jack One') OR (`p`.`lastName` = 'Jack One')) OR (((`p`.`firstName` + ' ') + `p`.`lastName`) = 'Jack One')
它不起作用,因为我认为如果我想在 MySQL 中连接多个字符串,我们需要使用 CONCAT(firstName, ' ', lastName)。
我尝试使用以下 .NET 函数,但它们无法翻译为 sql(无法翻译 LINQ 表达式...。要么以可翻译的形式重写查询,要么通过插入显式切换到客户端评估调用 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync())
- string.Join(' ', firstName, lastName)
- string.Concat(firstName, " ", lastName)
我如何在 .NET CORE 3.1 中实现这一点不将所有数据拉入内存并在客户端进行评估?
谢谢
【问题讨论】:
标签: mysql entity-framework .net-core linq-to-entities