我正在尝试使用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)
但不是只匹配其中一个键的项目(例如,"我作为狗的生活")
谁能发现我做错了什么或提供解决方案?
确保考虑套管.使用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)