繁体   English   中英

使用 STRING_AGG 将 sql 转换为 linq

[英]Convert sql to linq with STRING_AGG

将 sql 转换为具有 STRING_AGG 的 linq

SELECT
    V.pkid,
    V.[Name] AS VendorName,
    SFTP.SFTP_Paths AS SFTP_Paths
FROM
    dbo.Vendor V
    LEFT OUTER JOIN (
        SELECT
            connected_to,
            STRING_AGG(rootfolder, ', ') AS SFTP_Paths
        FROM
            dbo.FTP
        WHERE
            connected_to_type = 4 -- Vendor
        GROUP BY
            connected_to
    ) SFTP ON v.pkid = SFTP.connected_to
WHERE
    V.active = 1
order by
    V.[name]

此查询返回相同的 sql 查询结果。 而不是STRING_AGG (rootfolder, ',') AS SFTP_Paths我使用SFTP_Paths = string.Join(",", b.Select (c => c.rootfolder).ToArray()) . 查询的rest可以理解。

var query = vendorList.Join(lstFtp.Where(x => x.connected_to_type == 4).GroupBy(a => a.connected_to)
    .Select(b => new
    {
         connected_to = b.Key,
         SFTP_Paths = b.Select(c => c.rootfolder).ToList()
    }).AsEnumerable()
    .Select(b => new
    {
        connected_to = b.connected_to,
        SFTP_Paths = string.Join(",", b.SFTP_Paths).ToArray()
    }),
    right => right.pkid,
    left => left.connected_to,
    (right, left) => new
    {
        V = right,
        SFTP = left
    }).Where(d => d.V.active == 1)
    .Select(e => new
    {
        pkid = e.V.pkid,
        VendorName = e.V.Name,
        SFTP_Paths = e.SFTP.SFTP_Paths
    })
    .OrderBy(e => e.VendorName).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM