【发布时间】:2015-07-30 02:45:46
【问题描述】:
如何使用实体框架 6 和 npgsql 执行 LIKE 搜索?
我试过了
1. SQLMethods.Like
queryable.Where(entity => SqlMethods.Like(entity.Name, "%EW%6%"));
但我收到了消息
LINQ to Entities 无法识别方法 'Boolean Like(System.String, System.String)' 方法,并且该方法无法转换为存储表达式。
2. linq 扩展方法
然后我从这个stackoverflow帖子中尝试了linq扩展方法WhereLike:https://stackoverflow.com/a/27153779/1489968
它可以工作,但并非适用于所有情况,因为它会将搜索字符串分成几部分。
queryable.WhereLike(t => t.Name, "%EW%6%"));
被转换为两个并连接的Contains 调用,它们被转换为两个LIKE 表达式。
SELECT ...
WHERE ... AND
("Extent1"."name" LIKE E'%EU%' AND "Extent1"."name" LIKE E'%6%')
表示“名称中包含'EU'和'6'的所有实体”
但我希望转换产生如下查询:
SELECT ...
WHERE ... AND
("Extent1"."name" LIKE E'%EW%6%')
表示“名称包含'EU'后跟一个字符串,包含'6'的所有实体”
【问题讨论】:
-
不是 100% 确定这一点,但我认为它需要 Npgsql EF6 提供程序中的一些特定支持,目前不存在。你能打开一个关于这个的问题吗(github.com/npgsql/npgsql)?不确定我们是否会很快解决这个问题......
标签: c# linq entity-framework postgresql npgsql