Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net查询中删除表中的重复行_C#_Asp.net_Duplicates - Fatal编程技术网

C# 如何在asp.net查询中删除表中的重复行

C# 如何在asp.net查询中删除表中的重复行,c#,asp.net,duplicates,C#,Asp.net,Duplicates,我在一个表中有两行数据相似。我想删除一个表中两行之间的重复数据,如何使用C ASP.NET查询删除它 我使用distinct删除重复数据,但它显示了一个错误: '由于图像数据类型不可比较,因此无法将其选择为不同类型' 这是我的密码: var query = (from user in context.Users join group in context.Groups on user.ID equals group.UserID orderby

我在一个表中有两行数据相似。我想删除一个表中两行之间的重复数据,如何使用C ASP.NET查询删除它

我使用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);
这是预期的结果:

但结果是这样的:

因此,我需要显示两行之间的数据,并将其合并为一行

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代码中删除它呢?

如果您有重复的行,那么您可以使用Skip删除相同的行,如下所示

选择user.Skip1

如果您有两个以上的重复记录,那么也可以使用Take1

希望这对你有帮助

编码快乐

您可以像这样使用SelectMany:

按所有列或所需列分组, 创建一个row_num列, 筛选所有行\u nums!=1.
这没用。使用skip1仅删除第一个数据,take1将仅显示列表中的一个数据您可以尝试以下操作:context.Users.GroupByg=>new{g.Name,g.NameId,g.GroupId}.SelectManys=>s.Selectu,i=>new{Id=u.Id,Name=u.Name,NameId=u.NameId,GroupId=u.GroupId,Index=i+1}。其中w=>w=>w.Index==1.Selects=>new Users=>{Id=s.Id,GroupId=s.GroupId,NameId=s.NameId,Name=s.Name}.ToList。老实说,我不会试图在一步中完成所有事情。你已经有多个where,这是我要划清界限的地方。我会保持查询的原样,用另一个表达式过滤掉重复的内容。分而治之似乎是一个好策略。
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);