C# 如何在asp.net查询中删除表中的重复行
我在一个表中有两行数据相似。我想删除一个表中两行之间的重复数据,如何使用C ASP.NET查询删除它 我使用distinct删除重复数据,但它显示了一个错误: '由于图像数据类型不可比较,因此无法将其选择为不同类型' 这是我的密码: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
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);