删除重复的行mvc

时间:2016-01-14 15:21:21

标签: c# sql asp.net-mvc asp.net-mvc-4

我有这个方法

Meeting是一个班级 AttendeesICollection

中的Meeting

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

目标是删除表中具有相同用户名的重复参加者 但是当前的方法是删除所有记录并保留副本
我哪里错了?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

我可以看到你按名称分组元素并删除最后一项。所以你删除了独特的元素。 喜欢这个

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

答案 2 :(得分:0)

您可以尝试编写原始SQL并通过EF调用并返回列表中的Attendees对象。

var query = "Select * from Attendees group by username";
var attendeesList = dbContext.Database.SqlQuery<Attendees>(query).ToList<Attendees>();