[英]Entity Framework Core .Select() - SQL has all columns not the specified subset
[英]Filter all specified tags with Entity Framework Core
假設我有以下表格:
GmTag
TagId: integer
Tag: string
GmProTab
ProId: integer
ProDes: string
GmProTag
ProTagId: integer
ProId: integer
TagId: integer
使用 SqlServer 我寫:
SELECT p.*
FROM GmProTab p
WHERE EXISTS (SELECT NULL
FROM GmProTag tg
JOIN GmTag t ON t.TagId = tg.TagId
WHERE t.tag IN ('Brinco', 'Argola')
AND tg.ProId = p.ProId
GROUP BY tg.ProId
HAVING COUNT(DISTINCT t.Tag) = 2)
如何在 EF 核心中對其進行編碼?
這是我對您的 SQL 的(或多或少)字面翻譯:
var ans = from p in GmProTab
where (from tg in GmProTag
join t in GmTag on tg.TagId equals t.TagId
where new[] { "Brinco", "Argola" }.Contains(t.Tag) && tg.ProId == p.ProId
group t by tg.ProId
).Any(t_g => t_g.Select(t => t.Tag).Distinct().Count() == 2)
select p;
這是我重新工作以使用join
而不是子查詢(未經測試):
var ans2 = from p in GmProTab
join tg in GmProTag on p.ProId equals tg.ProId
join t in GmTag on tg.TagId equals t.TagId
group t by p into t_g
where t_g.Any(t2 => t2.Tag == "Brinco") && t_g.Any(t2 => t2.Tag == "Argola")
select t_g.Key;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.