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