Как удалить повторяющуюся строку в таблице в запросе C # asp.net - PullRequest
0 голосов
/ 08 мая 2019

У меня есть две строки с одинаковыми данными в одной таблице.И я хочу удалить дубликаты данных между этими двумя строками из одной таблицы, как удалить их с помощью запроса C # ASP.NET?

Я использую distinct() для удаления дублирующихся данных, но при этом отображаетсяошибка:

'Тип данных изображения не может быть выбран как DISTINCT, потому что он несопоставим'

Вот мой код:

var query = (from user in context.Users
             join group in context.Groups on user.ID equals group.UserID
             orderby user.Name
             where group.GroupID == nameID && user.IsDeleted == false || 
                   userGroup.GroupID == fullID && user.IsDeleted == false
             where user.IsDeleted == false
             select user);

Это ожидаемый результат:

enter image description here

но результат таков:

enter image description here

Из-за этого дублируется, мне нужно показать данные между двумя строками и объединить их в один.

where group.GroupID == nameID && userMaster.IsDeleted == false || userGroup.GroupID == fullID && user.IsDeleted == false

В SQL Server я успешно удалил дублирующиеся данные следующим образом:

WITH CTE ([ID], [GroupID], [NameID], [Name], DuplicateCount) AS
(
    SELECT TOP (10) 
        [Group].ID, [GroupID], [NameID], [Name],
        ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Name asc) AS DuplicateCount
    FROM 
        [SCMD3].[dbo].[Group] 
    JOIN
        User ON Group.UserID = User.ID
    WHERE   
        (NameID LIKE '1' OR NameID LIKE '2') 
) 
SELECT * 
FROM CTE 
WHERE DuplicateCount = 1
ORDER BY Name ASC

но как удалить их в коде C #?

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Вы можете использовать SelectMany следующим образом:

var partitioned = query.GroupBy(x => x.ID, x.GroupID, x.NameID, x.Name)
                  .SelectMany(g =>
                    g.Select((j, i) => new { j.ID, j.GroupID, j.NameID, j.Name, row_num = i + 1 }))
                  .Where(r => r.row_num = 1);
  1. Группировать по всем (или необходимым) столбцам,
  2. Создать столбец row_num,
  3. Фильтровать все row_nums! = 1
0 голосов
/ 08 мая 2019

Если у вас есть повторяющаяся строка, вы можете использовать «Пропустить», чтобы удалить ее, как показано ниже:

выберите пользователя. Skip (1)

Если у вас более двух дублирующихся записей, тогда вы также можете использовать «Take (1)».

Надеюсь, это поможет вам.

Удачного кодирования !!!!

...