c# - 多次延迟执行与一次检索

标签 c# linq-to-sql

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

我有一个对象列表,我需要排除与表中的行匹配的所有对象 (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
}

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

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 的组合,所以我很想知道在性能方面哪个更好。

最佳答案

我认为多次调用和一次调用之间并没有真正的区别。在这两种情况下,对数据库的查询将发生在 foreach 循环需要结果列表的位置。不同之处在于第一个查询将返回整个表,而第二个查询将仅返回您要求的几个字段。所以我会说第二种会更有效率。

关于c# - 多次延迟执行与一次检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15432154/

相关文章:

linq-to-sql - 动态存储过程名称linq to sql

c# - 如何在 orderby 子句中使用带有动态参数的 LINQ

c# - LINQ to SQL 复杂查询

c# - 如何在程序启动期间使用 < 运算符 C# 加载 .dat 文件

c# - 如何在 C# 中的 FontWeights 之间使用等于运算符?

linq - 如何使用linq按多列分组

asp.net-mvc - 从基本 Controller 继承 LINQ-to-SQL 数据上下文

c# - DefaultIfEmpty 返回 null

c# - 在不同时区的特定时间安排电子邮件

c# - MVC @Html.DropDownList 在 ViewBag 中使用 SelectList 时出错