C# 动态集合的位置

本文关键字:位置 集合 动态 | 更新日期: 2023-09-27 18:35:37

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

谢谢

C# 动态集合的位置

你需要更多 LINQ:

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

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

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

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

你可以试试

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

LINQ 总是有各种方法...