【发布时间】:2016-01-21 04:07:09
【问题描述】:
我最初使用的是 foreach 循环,然后对于循环中的每个元素,我执行 LINQ 查询,如下所示:
foreach (MyObject identifier in identifiers.Where(i => i.IsMarkedForDeletion == false))
{
if (this.MyEntities.Identifiers.Where(pi => identifier.Field1 == pi.Field1 && identifier.Field2 == pi.Field2 && identifier.Field3 == pi.Field3).Any())
{
return false;
}
}
return true;
然后我这样修改:
if (identifiers.Any(i => !i.IsMarkedForDeletion && this.MyEntities.Identifiers.Where(pi => i.Field1 == pi.Field1 && i.Field2 == pi.Field2 && i.Field3 == pi.Field3).Any()))
{
return false;
}
return true;
我的问题是这仍然是使用 LINQ 的错误方式吗?基本上,我想消除对 foreach 循环的需要(这似乎我应该能够摆脱它),并且还通过不对列表的每个元素执行单独的 DB 查询来使 DB 查询更快。相反,我想对所有元素执行一次查询。谢谢!
【问题讨论】:
-
identifiers、MyEntities和MyEntities.Identifiers的类型是什么?它们是在内存集合还是数据库实体中? -
只有 MyEntities.Identifiers 在数据库中。其他一切都在记忆中。
-
换句话说,
identifiers在内存集合中,MyEntities.Identifiers是一个DbSet<Something>。 -
是的,没错。
-
我会使用
foreach循环,因为它更容易阅读。