Объединение нескольких значений столбца внутри переменной через запятую - PullRequest
0 голосов
/ 13 марта 2019

У меня есть запрос в 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

Может кто-нибудь помочь мне в этом?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы можете использовать 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()) 
      };

Проверьте пример кода в этой демоверсии

0 голосов
/ 13 марта 2019

Вы можете попробовать этот код

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

для справки проверить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...