我正在研究一个(快速而肮脏的)搜索引擎,使用linq to sql。我已经有一个字符串表,其中包含我想在每个条目的描述中搜索的每个单词。
在我的linq to sql进程的最后,我应该只获得包含 all 表格中的单词的条目。这是我到目前为止的代码( m1 是我的字符串表):
var myUser = from u in dataBase.Profiles
where u.Status == 2 // some primary selection
select u;
foreach (string word in m1)
{
myUser = from u in myUser
where ((word != "") ? u.Description.Contains(word) : 1 == 1)
select u;
}
myUser = from u in myUser
orderby u.ModificationDate descending // finally, we order the list
select u;
此代码运行良好,但遗憾的是,它不会选择包含两个字词的条目,而是包含至少一个字的所有条目。
你知道为什么吗?我没有:/答案 0 :(得分:1)
你是closing over the loop variable。
闭包关闭变量,而不是超过值。
尝试将字符串分配给局部变量:
foreach (string word2 in m1)
{
string word = word2;
myUser = from u in myUser
where ((word != "") ? u.Description.Contains(word) : 1 == 1)
select u;
}