删除重复的行 mvc

本文关键字:mvc 删除 | 更新日期: 2023-09-27 18:30:34

>我有这个方法

Meeting是一个类
AttendeesMeeting 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);
                }
            }
        }

目标是删除表中用户名相同的重复与会者。
但是当前的方法会删除所有记录并保留重复
项我哪里出错了?

删除重复的行 mvc

方法的正确版本如下所示:

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);
                    }
                }
                }
            }