我从LINQ Where子句中得到一些行为,但我不太满意。LINQ Where子句误解
例如,我正在尝试使用AND语义搜索条件列表。
下面是一些代码:
var items = new List<string>()
{
"beef",
"beef soup",
"beef ribs",
"chicken soup",
"soup",
"pork ribs",
"ribs"
};
var term = "soup beef";
var terms = term.Split(' ');
var result = items.AsQueryable();
foreach(var t in terms)
{
result = result.Where(i => i.Contains(t));
}
result.ToList().Dump();
结果是:
- 牛牛
- 汤
- 牛肋骨
不过,我一直在寻找它到AND结果,只返回:
- 牛肉汤
现在,我可以通过简单地添加
.ToList().AsQueryable()
WHERE子句的末尾得到的结果我想要的。
当然,如果后端是数据库,这不是我想要做的。
什么是真正奇怪的在这里的是,当我在循环检查“结果”,我得到如下:
- 第一where子句=>完整名单之前 - >有道理。
- 之后第一个地方('汤')=> ['牛肉汤','鸡汤','汤'] - >仍然看起来不错
- 第二次循环之前('牛肉')=> [牛肉','牛肉汤','牛肋骨'] - > WHOA!怎么了这里
- 后第二个循环=>保持不变
能向我解释的人是怎么回事(以及如何正确地解决这一问题)?
你经常有人问,你已经发现这是由于关闭了循环变量。请参阅:http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx请注意,他们正在考虑[改变行为C#5](http:// stackoverflow。COM /问题/ 7123898 /λ-捕获问题与 - 迭代器/ 7124236#7124236)。 –
确认。他们正在C#5中进行重大改变。这使得'foreach'循环与'for'循环有独特的不同。 –