【发布时间】:2018-03-10 10:44:57
【问题描述】:
我有一个数据库,其中包含一些字段。我想根据一个字段(“完整”)删除重复项 - 即,如果它有多个版本,我应该采用其中的任何一个/第一个,并丢弃其余的......
到目前为止,我还做不到 - 一切都会引发某种错误。
这是我的一个轮胎。不幸的是, distinctList 中的最后一个 Select 引发错误。
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()。
更新:现在我根据答案 here 实现了一个简单的 ExecuteSqlCommand。
string com = @"DELETE FROM BackupEvents
WHERE rowid NOT IN (
SELECT MIN(rowid)
FROM BackupEvents
GROUP BY full)";
context.Database.ExecuteSqlCommand(com);
如果有人知道如何使用 entity/linq - 请告诉我:-)
【问题讨论】:
-
异常信息是什么意思?
-
@mm8 有没有一种通用的方法来删除 SQLite 中的重复项?如果是这样,我将只使用字符串并执行命令。
标签: c# entity-framework linq sqlite duplicates