我正在尝试使用 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;
这不会返回任何内容。
我想要发生的是返回在描述字段中找到数组中所有单词的项目 例如,如果他们输入“cat dog”,我应该返回如下信息:
"A Cat and a Dog"
"Dogs and Cats"
"Catatonic Dogma"
但不是只匹配其中一个键的项目(例如,“我的狗生活”)
任何人都可以发现我做错了什么或提供解决方案吗?
最佳答案
确保考虑大小写。使用 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())))
关于c# - 匹配一个字段中的多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15692050/