在以下情况下最快的解决方案是什么:
我有一个对象列表,我需要排除与表中的行匹配的任何对象(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 的组合,所以我很想知道哪个更好,性能方面。