删除重复的行 mvc
本文关键字:mvc 删除 | 更新日期: 2023-09-27 18:30:34
>我有这个方法
Meeting
是一个类
Attendees
是Meeting
ICollection
类
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)
{
foreach (var item in model.Attendees.GroupBy(x => x.UserName).Select(y => y.Last()))
{
context.Attendees.Remove(item);
}
}
}
目标是删除表中用户名相同的重复与会者。
但是当前的方法会删除所有记录并保留重复
项我哪里出错了?
方法的正确版本如下所示:
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));
}
}
可以尝试编写原始 SQL 并通过 EF 调用,并在列表中返回与会者对象。
var query = "Select * from Attendees group by username";
var attendeesList = dbContext.Database.SqlQuery<Attendees>(query).ToList<Attendees>();
如我所见,您按名称对元素进行分组并删除最后一项。所以你删除了独特的元素。喜欢这个
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);
}
}
}
}