C#动态集合的位置

时间:2013-10-16 21:35:45

标签: c# collections

我想根据文本框搜索集合。应允许用户以任何顺序键入多个单词。这意味着如果集合中的字符串是“多么快乐的一天”,并且用户键入“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语句

感谢

3 个答案:

答案 0 :(得分:5)

您需要更多LINQ:

oc.Where(x => words.Any(w => x.SearchData.IndexOf(w) > -1))

答案 1 :(得分:0)

即使IndexOf(w)是匹配的子字符串,

true也会返回w。例如,在您的示例中,如果用户输入 Wha ,那么它将与 What 匹配。据我了解情况并非如此。因此,您可以简单地拆分SearchData并搜索它:

var enteredWords =  SearchData.Split();
return oc.Where(p=> enteredWords.Any(q=>p.Contains(q));

答案 2 :(得分:0)

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

你可以尝试

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

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