c# - 匹配一个字段中的多个项目

标签 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;

这不会返回任何内容。

我想要发生的是返回在描述字段中找到数组中所有单词的项目 例如,如果他们输入“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/

相关文章:

c# - 使用 Lambda OrderBy Comparer 为特定字符串值赋予权重

c# - 检查是否选择了 ComboBox 值

c# - SQL 服务器 2008 : update increment logic difficulty

c# - Alt 标签在 IE 中显示不正确

c# - 如果使用 null 检查,LINQ2SQL 不会返回行

c# - 解析 HTML 文档 : Regular expression or LINQ?

c# - 仅针对一个请求在现有 HttpClient 中将 AllowAutoRedirect 设置为 false

c# - 如何使用 MysqlDataReader 运行多个查询

C# linq XML DeepCompare 和标签删除

c# - 分页 API 调用使用 Linq to Sql OrderBy 与字符串参数和反射