我想要实现的目标。
我正在进行协调过程,需要确保我的数据库表具有正确的条目。我需要在表中找到不在主列表中的记录。当我找到这些条目时,我需要对它们进行分组,并在每个组中找到最新的条目。如果最近条目的操作字段被定义为“已添加”,我将需要添加其操作字段标记为“已删除”的其他记录,因为它们未在主列表中定义。
我编写的代码选择数据库中不在主列表中的记录。然后它对这些进行分组并对它们进行排序,最后选择每个组中的第一个项目,现在将成为每个组中的最新项目。然后我只返回具有定义为“已添加”的操作的项目。我已针对单元测试和“真实”数据运行此代码。虽然它可以工作,但是对于一个拥有16,000条记录的数据库(从visual studio中运行时)运行时,可能需要40秒。任何人都可以建议是否可以修改我的代码以提高速度?
下面显示的是找到不匹配记录的代码
var linksInDb = _ctx.LinkRecords.ToList();
return (from dbl in linksInDb select dbl)
.Except(
from dbl in linksInDb
from l in links
where dbl.EP1Id == l.Endpoints[0].EntityKey.EntityId && dbl.EP2Id == l.Endpoints[1].EntityKey.EntityId
select dbl)
.GroupBy(x => new {x.EP1Id, x.EP2Id},
(key, g) => g.OrderByDescending(x => x.LastModifiedDate_UTC).First())
.Where(x => x.Operation == "Added")
.ToList();
NB。名为“links”的主列表是Link类型的通用列表,它与_ctx.LinkRecords.ToList()返回的类型相同;