postgresql - 比较 LINQ 查询中的两个数组
问题描述
我想编写 LINQ 查询来比较两个数组。我希望将查询转换为以下查询:
SELECT id, name
FROM persons
WHERE '{"dance", "acting", "games"}' && (hobbies);
该条件以这种方式起作用:
'{"dance"}' && '{"dance", "acting", "games"}'; -- true
'{"dance","singins"}' && '{"dance", "acting", "games"}'; -- true
'{"singins"}' && '{"dance", "acting", "games"}'; -- false
我写了这个查询:
List<string> arr = new List<string>(){ "dance", "acting", "games" };
var query = (from p in _context.Persons
where arr.Any(kw => p.hobbies.Contains(kw))
select new
{
id = p.id,
name = p.name
}).ToList();
翻译后的查询是:
SELECT p."id" AS id, p."name" AS name
FROM dataBase."Persons" AS p
它可以理解过滤器在服务器中执行。因此查询会从数据库中获取所有数据并在服务器上进行过滤。这会导致性能问题并且无法通过负载测试。
我需要一个查询,它不仅可以完成这项工作,而且还可以使用“&&”转换为上述查询。
LINQ 中有什么方法可以执行这个查询吗?
谢谢
解决方案
如果您的数据库看起来像我预测的那样,这可能是一个解决方案。虽然还有一些代码,但我认为这应该作为 SQL IN 语句执行:
List<string> arr = new List<string>(){ "dance", "acting", "games" };
var matches = from hobby_person in _context.Hobbies_Persons
join person in _context.Persons on person.Id equals hobby_person.PersonId
join hobby in _context.Hobbies on hobby.Id equals hobby_person.HobbyId
where arr.Contains(hobby.Name)
select new
{
id = p.id,
name = p.name
}).ToList();
推荐阅读
- flask - Traefik2 将多个服务路由到烧瓶中的多个子路径
- r - R,将特定时期(例如四月-次年三月)的某些值与上一年进行比较
- node.js - 使用 node.js 流提供远程 URL
- python - 计算 Pandas 列中的日期列表
- c++ - 当 GCC 正常时,Clang 报告“constexpr if condition is not a constant expression”
- opencart - 编辑订单时,Giftteaser 扩展在管理面板中不起作用 [Opencart]
- node.js - NodeJs + Postgresql + ElasticSearch
- excel - 在数组excel中找到最接近整数的最小数字
- javascript - 引用函数调用
- sql-server - 如何在 SQL Server 中添加存储为十进制的两个时间值