C# 删除重复行mvc
我有这个方法C# 删除重复行mvc,c#,sql,asp.net-mvc,asp.net-mvc-4,C#,Sql,Asp.net Mvc,Asp.net Mvc 4,我有这个方法 会议是一门课程 与会者是会议 课程 public partial class Meeting { public Meeting() { this.Attendees = new List<Attendees>(); } public virtual ICollection<Attendees> Attendees{ get; set; } [...] 目标是删除表中具有相同
会议
是一门课程与会者
是会议
课程
public partial class Meeting
{
public Meeting()
{
this.Attendees = new List<Attendees>();
}
public virtual ICollection<Attendees> Attendees{ get; set; }
[...]
目标是删除表中具有相同用户名的重复与会者。但当前的方法是删除所有记录并保留副本
哪里出错了?因为我可以看到您按名称对元素进行了分组,并删除了最后一项。所以你移除了独特的元素。 像这样
private void RemoveRowsDuplicated(Meeting model)
{
if (model.Attendees != null)
{
var temporaryAtendees = new List<Attendees>();
foreach(var item in model.Attendees)
{
if (temporaryAtendees.Contains(item))
{
context.Attendees.Remove(item);
}
else
{
temporaryAtendees.Add(item);
}
}
}
}
private void已复制(会议模式)
{
如果(model.attendes!=null)
{
var temporaryAtendees=新列表();
foreach(模型中的var项。与会者)
{
if(临时索引包含(项目))
{
上下文。与会者。删除(项目);
}
其他的
{
临时性附录。添加(项目);
}
}
}
}
我可以看到您按名称对元素进行分组,并删除最后一项。所以你移除了独特的元素。
像这样
private void RemoveRowsDuplicated(Meeting model)
{
if (model.Attendees != null)
{
var temporaryAtendees = new List<Attendees>();
foreach(var item in model.Attendees)
{
if (temporaryAtendees.Contains(item))
{
context.Attendees.Remove(item);
}
else
{
temporaryAtendees.Add(item);
}
}
}
}
private void已复制(会议模式)
{
如果(model.attendes!=null)
{
var temporaryAtendees=新列表();
foreach(模型中的var项。与会者)
{
if(临时索引包含(项目))
{
上下文。与会者。删除(项目);
}
其他的
{
临时性附录。添加(项目);
}
}
}
}
方法的正确版本如下所示:
private static void RemoveRowsDuplicated(Meeting model)
{
if (model.Attendees != null)
{
var duplicates = new List<Attendees>();
foreach (var item in model.Attendees.GroupBy(x => x.UserName).Where(x=>x.Count()>1))
{
duplicates.AddRange(item.Skip(1));
}
duplicates.ForEach(x=>context.Attendees.Remove(x));
}
}
private static void已复制(会议模型)
{
如果(model.attendes!=null)
{
var duplicates=新列表();
foreach(model.attendes.GroupBy(x=>x.UserName)中的var项,其中(x=>x.Count()>1))
{
重复项。添加范围(项。跳过(1));
}
replicates.ForEach(x=>context.attendes.Remove(x));
}
}
方法的正确版本如下所示:
private static void RemoveRowsDuplicated(Meeting model)
{
if (model.Attendees != null)
{
var duplicates = new List<Attendees>();
foreach (var item in model.Attendees.GroupBy(x => x.UserName).Where(x=>x.Count()>1))
{
duplicates.AddRange(item.Skip(1));
}
duplicates.ForEach(x=>context.Attendees.Remove(x));
}
}
private static void已复制(会议模型)
{
如果(model.attendes!=null)
{
var duplicates=新列表();
foreach(model.attendes.GroupBy(x=>x.UserName)中的var项,其中(x=>x.Count()>1))
{
重复项。添加范围(项。跳过(1));
}
replicates.ForEach(x=>context.attendes.Remove(x));
}
}
您可以尝试编写原始SQL并通过EF调用,然后返回列表中的Attendeers对象
var query = "Select * from Attendees group by username";
var attendeesList = dbContext.Database.SqlQuery<Attendees>(query).ToList<Attendees>();
var query=“按用户名从与会者组中选择*”;
var attendeesList=dbContext.Database.SqlQuery(query.ToList();
您可以尝试编写原始SQL并通过EF调用,然后返回列表中的Attendeers对象
var query = "Select * from Attendees group by username";
var attendeesList = dbContext.Database.SqlQuery<Attendees>(query).ToList<Attendees>();
var query=“按用户名从与会者组中选择*”;
var attendeesList=dbContext.Database.SqlQuery(query.ToList();
是的,我知道你还有其他问题,我的答案与此无关是的,我知道你还有其他问题,我的答案与此无关我相信,这里已经回答了:我相信,这里已经回答了: