匹配字段中的多个项目

Ada*_*dam 3 c# linq

我正在尝试使用linq创建一个有效的搜索

用户输入他们的搜索关键字(或前几个字符),然后将其解析为数组.

对于第一部分,我想找到搜索字段的实例,其中找到了所有单词.(后来,我搜索任何,但那部分工作)

string[] arSearchString = searchString.Split(',', ' ', ';');
var codes = from c in CodeList
            where arSearchString.All(val => c.Description.StartsWith(val) || 
                                            c.Description.Contains(" " + val))
            select c;
Run Code Online (Sandbox Code Playgroud)

这什么都不返回.

我想要发生的是返回在描述字段中找到数组中所有单词的项目.例如,如果他们键入"cat dog",我应该得到以下内容:

"A Cat and a Dog"
"Dogs and Cats"
"Catatonic Dogma"
Run Code Online (Sandbox Code Playgroud)

但不是只匹配其中一个键的项目(例如,"我作为狗的生活")

谁能发现我做错了什么或提供解决方案?

mat*_*mmo 5

确保考虑套管.使用ToUpper优化的字符串比较.编辑:我已经去了ToUpperInvariant文化安全:)

试试这个:

string[] arSearchString = searchString.Split(',', ' ', ';');
var codes = from c in CodeList
        where arSearchString.All(val => c.Description.ToUpperInvariant().StartsWith(val.ToUpperInvariant()) || 
                                 c.Description.ToUpperInvariant().Contains(" " + val.ToUpperInvariant()))
        select c;
Run Code Online (Sandbox Code Playgroud)

但我真的很想把它转换成链接,因为它有点乱.我更喜欢这个,但你可以选择:

string[] arSearchString = searchString.Split(',', ' ', ';');
var codes = CodeList
    .Where(c => arSearchString
        .All(val => c.Description.ToUpperInvariant().StartsWith(val.ToUpperInvariant()) 
            || c.Description.ToUpperInvariant().Contains(" " + val.ToUpperInvariant())))
Run Code Online (Sandbox Code Playgroud)