想象一下,用户输入了一个句子,我需要搜索由输入的句子中的单词组成的主题.这些代码我认为他们可以解决这个问题.
var result = from x in dataBase.tableName
select x;
string[] words = enteredString.Split();
foreach(string word in words)
{
result = result.Where(x => x.subject.Contains(word));
}
Run Code Online (Sandbox Code Playgroud)
它只显示句子中最后一个单词的搜索结果,但我认为每次在where行中使用单词时,结果必须缩小.
试试这个:
foreach(string word in words)
{
var temp = word;
result = result.Where(x => x.subject.Contains(temp));
}
Run Code Online (Sandbox Code Playgroud)
这被称为(至少由ReSharper)"访问修改后的闭包" - lambda表达式不捕获值,它们捕获整个变量.并且变量的值word随循环的每次迭代而变化.因此,由于Where()方法是惰性求值的,word所以在消耗此序列时,值是序列中的最后一个.
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |