通过逗号分隔连接变量内的多个列值
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
我在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