1

我有一些代码在其中应用了这样的“where子句”:

我以“n”作为数据库表的示例。

List<KeyValuePair<int, int>> n = new List<KeyValuePair<int, int>>();
n.Add(new KeyValuePair<int, int>(1,2));
n.Add(new KeyValuePair<int, int>(1,3));
n.Add(new KeyValuePair<int, int>(4,6));
n.Add(new KeyValuePair<int, int>(4,3));
n.Add(new KeyValuePair<int, int>(5,3));

var zzz = n.Where(z => z.Key == 1); // this returns "1,2" and "1,3"

然后在我的代码的其他地方我做了这个:

zzz.Where(x => x.Value == 3); // this should return "1,3"... Instead it seems to return "4,3" and "5,3" and "1,3".

不是第二个 Where 应该只返回“1,3”吗???第二个 Where 子句应该应用于“zzz”的结果,不是吗?

4

1 回答 1

2

第二个 Where 子句应该应用于“zzz”的结果,不是吗?

是的,事实上确实如此。拿这个示例代码:

List<KeyValuePair<int, int>> n = new List<KeyValuePair<int, int>>();
n.Add(new KeyValuePair<int, int>(1,2));
n.Add(new KeyValuePair<int, int>(1,3));
n.Add(new KeyValuePair<int, int>(4,6));
n.Add(new KeyValuePair<int, int>(4,3));
n.Add(new KeyValuePair<int, int>(5,3));

var zzz = n.Where(z => z.Key == 1); // this returns "1,2" and "1,3"

zzz = zzz.Where(x => x.Value == 3); // this then filters to the 2nd option

foreach(var pair in zzz)
    Console.WriteLine("{0}:{1}", pair.Key, pair.Value);

1:3正如预期的那样,这将打印出来。

我怀疑问题可能是您没有重新分配第二个过滤器zzz.Where(x => x.Value == 3); 的结果:需要将结果分配给一个变量(或枚举)才能看到实际的过滤结果。

于 2013-10-09T18:42:22.633 回答