如何使用实体和LINQ从sqlite db-删除重复项



我有一个db,其中包含几个字段。我想根据一个字段("完整")删除重复项 - 即如果有多个版本,我应该拿走其中的任何/首先,然后丢弃其余版本...

到目前为止,我不能 - 一切都会引起某种错误。

这是我的轮胎之一。不幸的是,在独特清单中的最后一个选择会引发错误。

using (var context = new JITBModel())
{
    var allList = context.BackupEvents.Select(i => i.Id).ToList();
    var distinctList = context.BackupEvents
        .GroupBy(x => x.Full)
        .Select(i => i.ToList())
        .Where(c => c.Count > 1)
        .Select(t => t[0].Id).ToList();
    var dups = allList.Except(distinctList);
    context.BackupEvents.RemoveRange(from e in context.BackupEvents
                                     where dups.Contains(e.Id)
                                     select e);
    context.SaveChanges();
}

另外,似乎无法在选择查询中选择.first()。


update :现在,我基于此处的答案实现了一个简单的executesqlCommand。

string com = @"DELETE FROM BackupEvents
             WHERE rowid NOT IN (
             SELECT MIN(rowid) 
             FROM BackupEvents 
             GROUP BY full)";
context.Database.ExecuteSqlCommand(com); 

如果有人知道如何使用实体/linq - 让我知道: - )

而不是t => t [0] .id,尝试t.firstordefault()。id。

也许下面的代码可以工作吗?我没有运行它,但是我没有使用与下面类似的东西遇到任何预编译错误。

using (var context = new JITBModel())
{

  var duplicates= context.BackupEvents
    .GroupBy(x => x.Full)
    .Where(grp => grp.Count() > 1)
    .Select(grp=>grp.FirstOrDefault());
  context.BackupEvents.RemoveRange(duplicates);
  context.SaveChanges();
}

最新更新