首页 > 解决方案 > 使用左连接和分组将 SQL 转换为 LINQ

问题描述

我已经通过 SQL 完成了这个查询,并想翻译成 LINQ

SELECT
ENT_DESC,
CAT_DESC,
PART_NUM, 
PART_DESC,  
GROUP_CONCAT(PART_OPTIONS.CODE, CHAR(13)) AS CODE,
PART_OPTIONS.PROMPT AS PROMPT,
PART_OPTIONS.DESCRIPTION AS DESCRIPTION,
PART_OPTIONS.PRICE AS PRICE,
ATTRIBUTE_DATA.NOTE,
ATTRIBUTE_DATA.DESCRIPTION AS ATTR_DESC 
FROM ITEM_DATA 
LEFT JOIN PART_OPTIONS ON  ITEM_DATA.ID = PART_OPTIONS.PART_ID
LEFT JOIN ATTRIBUTE_DATA ON  ITEM_DATA.ID = ATTRIBUTE_DATA.PART_ID
GROUP BY PART_OPTIONS.PART_ID

我知道如何在没有 GROUP_CONCAT 的情况下做到这一点,

from c in ITEM_DATA
join a in ATTRIBUTE_DATA on c.ID equals a.PART_ID into at
from a in at.DefaultIfEmpty()
join p in PART_OPTIONS on c.ID equals p.PART_ID into pa
from p in pa.DefaultIfEmpty()
select new { 
        ENT_DESC = c.ENT_DESC,
        CAT_DESC = c.CAT_DESC,
        PART_NUM = c.PART_NUM,
        PART_DESC = c.PART_DESC,
        CODE = p.CODE,
        PROMPT = p.PROMPT,
        DESCRIPTION = p.DESCRIPTION,
        PRICE = p.PRICE,
        NOTE = a.NOTE,
        ATTR_DESC = a.DESCRIPTION,
        }

而且我也分别做了 GROUP_CONCAT

from c in ITEM_DATA
join a in ATTRIBUTE_DATA on c.ID equals a.PART_ID into at
from a in at.DefaultIfEmpty()
join p in PART_OPTIONS on c.ID equals p.PART_ID into pa
from p in pa.DefaultIfEmpty()
group p by p.PART_ID into ps
select new { 
        CODE = ps.Select(g=>g.CODE),
        }

但在那之后“c”和“a”消失了,我不知道如何访问 ITEM_DATA 和 ATTRIBUTE_DATA 表。

标签: sqllinq

解决方案


推荐阅读