我從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'循環有獨特的不同。 –