0

我想根据文本框搜索一个集合。应该允许用户以任意顺序输入多个单词。意思是如果集合中的字符串是“What a happy day”并且用户输入“day What”,则字符串应该出现。现在我知道如何用这样的东西硬编码允许的字数(例如只允许 3 个字);

 nc = oc.Where(X => X.SearchData.IndexOf(words[0]) > -1 || X.SearchData.IndexOf(words[1]) > -1 || X.SearchData.IndexOf(words[2]) > -1);

注意:是的,我知道我必须保护以确保数组单词中有实际的 3 个值,但未显示。

这样做的问题是它限制了用户,我不想这样做。如果用户想要搜索 10 或 20 件东西,那对我来说没问题。

有没有办法为集合 oc 动态创建 Where 语句?

谢谢

4

3 回答 3

5

您需要更多 LINQ:

oc.Where(x => words.Any(w => x.SearchData.IndexOf(w) > -1))
于 2013-10-16T21:37:31.387 回答
0

IndexOf(w)true即使w是匹配的子字符串也返回。例如,在您的示例中,如果用户输入Wha,则它与What匹配。据我了解,情况并非如此。因此,您可以简单地SearchData对其进行拆分和搜索:

var enteredWords =  SearchData.Split();
return oc.Where(p=> enteredWords.Any(q=>p.Contains(q));
于 2013-10-16T21:47:59.803 回答
0

根据我的评论和@Alireza 给出的答案,我认为@Slaks 的答案将匹配部分单词

你可以试试

oc.Where(phrase => phrase.Split().Intersect(SearchData.Split()).Count() > 0);

LINQ 总是有各种各样的方法......

于 2013-10-16T23:01:25.473 回答