通过逗号分隔连接变量内的多个列值

Concatenating multiple column values inside a variable by comma separated

我在linq-to-sql中有一个查询如下:

var query = (from users in _context.Users 
            join consumers in _context.Consumers 
            on users.usersId equals consumers.consumerId 

            from clients in _context.Clients.Where(x => x.Id == users.Id).DefaultIfEmpty().Take(1)
            where consumerId.Contains(consumers.consumerId)
            select new UserConsumerDto 
            {
             FirstName = users.FirstName, 
             LastName = users.LastName, 
             ClientName = clients.Name
            }).ToList()

以上查询returns我好几行;这意味着一个用户可以有多个客户端。所以我加了Take(1),暂时只得到一个client。

现在,当我删除 Take(1) 时,会返回几条记录。 我想通过用逗号分隔在用户的单个记录中添加客户端名称来避免这种情况。

例如:

User 1 | ClientA, ClientB 

而不是:

User 1 | Client A
User 1 | Client B

有人可以帮我实现这个吗?

您可以使用 group by 对记录进行分组,例如 UserName,然后使用 string.Join(",",ClientName) 聚合客户名称以连接客户名称。
这是一个示例代码:

    var userClients = from c in (dbContext joined tables)
      group c by c.UserName into u 
      select new {
          UserName = u.First().UserName,
          ClientName = string.Join(",", (from n in u select n.ClientName).ToArray()) 
      };

检查此demo

中的示例代码

你可以试试这个代码

SELECT DISTINCT ST2.SubjectID, 
    SUBSTRING(
    (
    SELECT ','+ST1.StudentName AS [text()]
    FROM dbo.Students ST1
    WHERE ST1.SubjectID = ST2.SubjectID
    ORDER BY ST1.SubjectID
    FOR XML PATH ('')
    ), 2, 1000) [Students]
    FROM dbo.Students ST2

供参考check