【问题标题】:Concatenating multiple column values inside a variable by comma separated用逗号分隔变量内的多个列值连接
【发布时间】:2019-08-03 17:15:10
【问题描述】:

我在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()

上面的查询返回了几行;这意味着一个用户可以有多个客户端。因此,我添加了Take(1),暂时只获得一个客户。

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

例如:

User 1 | ClientA, ClientB 

代替:

User 1 | Client A
User 1 | Client B

有人可以帮我实现吗?

【问题讨论】:

    标签: c# sql linq linq-to-sql


    【解决方案1】:

    您可以使用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中的示例代码

    【讨论】:

    • 如何在linq-to-sql 中实现这一点?
    • @crazydev 答案已更新。添加了示例代码和演示。
    【解决方案2】:

    你可以试试这个代码

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 2021-09-05
      • 2016-07-10
      • 2020-09-14
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      相关资源
      最近更新 更多