日期:2014-05-20  浏览次数:20725 次

LINQ在foreach循环中存在的问题
代码如下
  List<string> table = new List<string>();
  table.Add("a");
  table.Add("b");
  table.Add("c");
  table.Add("aa");
  table.Add("bb");
  table.Add("cc");
  table.Add("aabb");
  table.Add("aacc");
  table.Add("bbcc");
  table.Add("aabbcc");

  string[] keys = new string[] { "a", "b", "c" };

  IEnumerable<string> sql = table;

  foreach (string key in keys)
  {
  sql = sql.Where(s => s.Contains(key));
  }

  int count = sql.Count();

我想要的结果应该是count为1,找到的那个字符串是aabbcc

但是实际结果是5,返回的是c, cc, aacc, bbcc, aabbcc, 也就是只有最后一个条件满足了
我调试了一下发现,在第3次进入foreach循环体时,sql仍然还有10个对象,似乎前2次的WHERE都没有生效

然后我将foreach换成了
for (int i = 0; i < keys.Length; i++)
{
  string key = keys[i];
  sql = sql.Where(s => s.Contains(key));
}

结果就是 count为1了,正确了


谁知道这是为什么吗

------解决方案--------------------
用Visual Studio 11。

参考:http://topic.csdn.net/u/20120325/21/4617ac01-b6dc-40b5-ab05-df7039ea4d5a.html