我从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子句的末尾。
当然,如果后端是数据库,这不是我想要做的。
这里真正奇怪的是,当我在循环中检查'结果'时,我得到以下内容:
有人可以向我解释发生了什么(以及如何正确解决这个问题)?
答案 0 :(得分:3)
查看对已修改关闭的访问
基本上问题是你的t
循环中正在修改foreach
,但是你在闭包中使用它(Where lambda方法),它通过引用访问t
答案 1 :(得分:0)
封闭件!!!精氨酸.... 明白了。
var cTerm = t;
result = result.Where( i => i.Contains(cTerm) );
抱歉随机...