【问题标题】:SQL Like search in LIST and LINQ in C#SQL Like 搜索 LIST 和 C# 中的 LINQ
【发布时间】:2011-10-03 08:40:44
【问题描述】:

我有一个列表,其中包含需要排除的单词列表。

我的方法是创建一个包含这些单词的列表并使用 Linq 进行搜索。

List<string> lstExcludeLibs = new List<string>() { "CONFIG", "BOARDSUPPORTPACKAGE", "COMMONINTERFACE", ".H", };
string strSearch = "BoardSupportPackageSamsung";
bool has = lstExcludeLibs.Any(cus => lstExcludeLibs.Contains(strSearch.ToUpper()));

我想找出字符串 strSearch 的一部分是否存在于 lstExcludedLibs 中。

原来.any 只寻找完全匹配。是否有可能使用类似或通配符搜索

在 linq 中这可能吗?

我可以使用 foreach 和 contains 来实现它,但我想使用 LINQ 让它更简单。

编辑:我试过 List.Contains 但它似乎也不起作用

【问题讨论】:

  • 只是一个观察,但恕我直言,您的变量名前缀“lst”和“str”应该被省略。这是对匈牙利符号的误解,是多余的。
  • 已在下面的回答中添加了评论

标签: c# linq


【解决方案1】:

你弄错了,应该是:-

List<string> lstExcludeLibs = new List<string>() { "CONFIG", "BOARDSUPPORTPACKAGE", "COMMONINTERFACE", ".H", };
string strSearch = "BoardSupportPackageSamsung";
bool has = lstExcludeLibs.Any(cus => strSearch.ToUpper().Contains(cus));

顺便说一句 - 这只是一个观察,但恕我直言,你的变量名前缀“lst”和“str”应该被省略。这是对匈牙利符号的误解,是多余的。

【讨论】:

    【解决方案2】:

    我认为这行应该是:

    bool has = lstExcludeLibs.Any(cus => cus.Contains(strSearch.ToUpper()));
    

    【讨论】:

    • 以我的例子,我总是对你的建议不以为然。我在BoardSupportPackageSamsung 中搜索BoardSupportPackage。一般来说,包含应该可以工作,但我得到了错误
    • 尝试改变它:bool has = lstExcludeLibs.Any(cus => strSearch.ToUpper().Contains(cus));
    • ToUpperToLower 是常见的技巧,但如果您想支持除英语以外的任何语言,那就太糟糕了。请参阅此问题以获得比 ToUpper 更好的解决方案:stackoverflow.com/questions/444798/…
    • Nitpicking.Example 代码在土耳其语言环境下失败。 Config 的大写字母是 CONFİG,因此不匹配。使用ToUpperInvariant() 是更好的选择。
    【解决方案3】:

    这对你有用吗?

    bool has = lstExcludeLibs.Any(cus => strSearch.ToUpper().Contains(cus));
    

    bool has = lstExcludeLibs.Where(cus => strSearch.ToUpper().IndexOf(cus) > -1).Count() > 0;
    

    bool has = lstExcludeLibs.Count(cus => strSearch.ToUpper().IndexOf(cus) > -1) > 0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-07
      • 2013-09-08
      • 1970-01-01
      • 2010-09-29
      • 2013-06-09
      • 1970-01-01
      • 2010-10-03
      相关资源
      最近更新 更多