【发布时间】:2011-05-05 03:11:45
【问题描述】:
我有两个不同类型的对象集合。我们称它们为 ALPHA 和 BRAVO。这些类型中的每一种都有一个属性,即对象的“ID”。类中没有重复的 ID,因此对于任何给定的 ID,最多有一个 ALPHA 和一个 BRAVO 实例。我需要做的是将它们分为 3 类:
- ALPHA 中未出现在 BRAVO 集合中的 ID 实例;
- BRAVO 中未出现在 ALPHA 集合中的 ID 实例;
- 出现在两个集合中的 ID 实例。
在所有 3 种情况下,我都需要将集合中的实际对象放在手边以进行后续操作。
我知道对于第 3 种情况,我可以这样做:
var myCorrelatedItems = myAlphaItems.Join(myBravoItems, alpha => alpha.Id, beta => beta.Id, (inner, outer) => new
{
alpha = inner,
beta = outer
});
我还可以为 #1 和 #2 的情况编写代码,看起来像
var myUnmatchedAlphas = myAlphaItems.Where(alpha=>!myBravoItems.Any(bravo=>alpha.Id==bravo.Id));
对于 unMatchedBravos 也是如此。不幸的是,这将导致多次迭代 alpha 集合(可能非常大!),以及多次迭代 bravos 集合(也可能非常大!)。
有什么方法可以统一这些查询概念,以尽量减少对列表的迭代?这些集合可以包含数千个项目。
【问题讨论】:
标签: c# .net linq query-optimization