如何加速检查两个列表是否缺少记录的linq语句

时间:2016-02-05 16:31:48

标签: c# linq

我想要实现的目标。

我正在进行协调过程,需要确保我的数据库表具有正确的条目。我需要在表中找到不在主列表中的记录。当我找到这些条目时,我需要对它们进行分组,并在每个组中找到最新的条目。如果最近条目的操作字段被定义为“已添加”,我将需要添加其操作字段标记为“已删除”的其他记录,因为它们未在主列表中定义。

我编写的代码选择数据库中不在主列表中的记录。然后它对这些进行分组并对它们进行排序,最后选择每个组中的第一个项目,现在将成为每个组中的最新项目。然后我只返回具有定义为“已添加”的操作的项目。我已针对单元测试和“真实”数据运行此代码。虽然它可以工作,但是对于一个拥有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()返回的类型相同;

0 个答案:

没有答案