【发布时间】:2021-02-12 02:25:35
【问题描述】:
是否可以使用 EF Core 检查字符串是否包含字符串[]
例如,我有一个数据库表,其中一列中有逗号分隔的关键字。我想获取也包含这些关键字的相关记录。我试过的方法:
public class Item {
int Id { get; set; }
string Keywords { get; set; }
}
var keywords = item.Keywords.Split(',');
var result = context.Items.Where(i => keywords.Any(j => i.Keywords.Contains(j)).ToListAsync();
这将引发错误消息:
LINQ 表达式 'DbSet().Where(g => __keywords_0.Any(j => g.Keywords.Contains(j)))' 无法翻译。
那么我将如何重写它以便可以将其转换为 SQL?获取完整列表并使用 C# 进行检查不是一种选择。也不可能将逗号分隔的关键字列表转换为它自己的表格。
【问题讨论】:
-
你试过这个
context.Items.Where(i => keywords.contains(i.Keywords).ToListAsync();@Roy Berris -
@Eldho 不起作用,因为例如,“car,building,pool” (
keywords) 不包含“apple,car,bike” (i.Keywords) -
您的关键字转换为字符串数组[],因此我们将每个项目与
i.keywords进行比较,因此包含。汽车关键字包含在苹果、汽车、自行车(i.keywords)中,所以它不应该工作吗? -
@Eldho 也没有,因为
[ "car", "building", "pool"](keywords) 不包含“apple,car,bike” (i.Keywords)。它需要匹配整个字符串。你的逻辑可以反过来工作,我在原帖中写过,但不能翻译成 SQL。 -
你想让它转换成
LIKE '%car,building,pool%'吗?如果记录有它但顺序不同:“游泳池、汽车、建筑”怎么办?
标签: c# entity-framework-core .net-5