多次延迟执行vs一次检索

本文关键字:一次 检索 vs 延迟 执行 | 更新日期: 2023-09-27 18:04:08

在下列情况下最快的解决方案是什么:

我有一个对象列表,我需要排除任何与表(SQLCE)中的行匹配的对象。

下面的

是伪代码的两种方式。

DataContext dc = new DataContext();
var dbOjbToExclude = dc.Tables.Where(..).Select(r=>r);
foreach (var item in myOriList)
{
     if (!dbObjToExclude.Any(r=>r.prop1==item.prop1 && r.prop2==item.prop2))
         //add item to a new collection
}

上面,我猜db查询在循环中为每个项目运行多次?我只检查了对象众多属性中的两个。另一种方法是只获取具有这两个属性的对象的数据对象集合,并检查该集合是否匹配:

DataContext dc = new DataContext();
var dbOjbToExclude = dc.Tables
                           .Where(..)
                           .Select(r=> new HelperObj {r.prop1,r.prop2})
                           .ToList<HelperObj>();
foreach (var item in myOriList)
{
     if (!dbObjToExclude.Any(r=>r.prop1==item.prop1 && r.prop2==item.prop2))
     //add item to a new collection
}

哪个更快?就像我说的,这是sqlce和linq to sql的组合,所以我很想知道哪个更好,性能方面。

多次延迟执行vs一次检索

我不认为真正的区别是在多个调用和一个调用之间。在这两种情况下,对DB的查询都将发生在foreach循环需要结果列表的地方。不同之处在于,第一个查询将返回整个表,而第二个查询将只返回您请求的两个字段。所以我认为第二种方法更有效率。