3

我正在尝试使用 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;

这不返回任何内容。

我想要发生的是返回在描述字段中找到数组中所有单词的项目例如,如果他们输入“猫狗”,我应该得到如下内容:

"A Cat and a Dog"
"Dogs and Cats"
"Catatonic Dogma"

但不是仅匹配其中一个键的项目(例如,“我的狗生活”)

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

4

2 回答 2

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;

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

string[] arSearchString = searchString.Split(',', ' ', ';');
var codes = CodeList
    .Where(c => arSearchString
        .All(val => c.Description.ToUpperInvariant().StartsWith(val.ToUpperInvariant()) 
            || c.Description.ToUpperInvariant().Contains(" " + val.ToUpperInvariant())))
于 2013-03-28T21:01:39.227 回答
1

该查询将区分大小写,因此,在您的示例中,您不会仅仅因为您搜索cat但不匹配而得到任何结果Cat。尝试将搜索字符串和比较转换为.ToUpper()or.ToLower()

于 2013-03-28T21:07:07.713 回答