簡體   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