读书人

LINQ在foreach循环中存在的有关问题

发布时间: 2012-04-16 16:20:04 作者: rapoo

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

读书人网 >.NET

热点推荐