【发布时间】:2011-05-02 17:06:33
【问题描述】:
我有一个 Foo 列表,我想根据 foo.HasBar 进行过滤。
Foo 也有一个属性 Baz。
选择 Foo 时,应过滤具有相同 Baz 对象的所有 Foo。
是否可以使用 LINQ 查询来实现这一点,还是应该使用 foreach 来代替?
编辑:这是一个示例数据集:
Foo.HasBar = true; Foo.Baz = 1;
Foo.HasBar = true; Foo.Baz = 1;
Foo.HasBar = false; Foo.Baz = 1;
Foo.HasBar = true; Foo.Baz = 2;
Foo.HasBar = false; Foo.Baz = 2;
我想要实现的是,如果 Foo.HasBar = true; Foo.Baz = 2; 已被选中,则不会对另一个 Foo.HasBar = true; Foo.Baz = 1; 执行其他迭代,或者不会对 Foo.HasBar = false; Foo.Baz = 2; 执行其他迭代。
下面是我使用 foreach 循环的方法:
var selectedFoos = new List<Foo>();
foreach(var foo in foos)
{
if (selectedFoos.Exists(f => f.Baz == foo.Baz))
continue;
if (foo.HasBar)
selectedFoos.Add(foo);
}
【问题讨论】:
-
您要删除在另一个 Foo 中存在 Baz 的 Foo,还是要选择不同的 Baze?
-
你只想要 foo.HasBar 的真值 RT?
-
@anishMarokey:是的,但是 HasBar 是性能密集型的,所以我正在尝试优化。这就是为什么 distinct 不适合我的情况。