【问题标题】:Linq query to check substring between a list and string用于检查列表和字符串之间的子字符串的 Linq 查询
【发布时间】:2017-04-03 08:49:03
【问题描述】:

我有一个字符串列表和一个字符串,我希望如果字符串包含列表中存在的任何字符串,系统将返回 false。我正在使用以下 lambda 表达式:

 result = !(((string[])ro_operandVal).ToList<string>()).Any(x => x.ToString().ToUpper() == lo_operandVal.ToString().ToUpper());

以下是数据集:

lo_operandVal = "ABC DEF GHI 邮政信箱" ro_operandVal 是具有以下元素的字符串列表:

  1. 邮政信箱
  2. 邮政信箱盒子

当我评估这个表达式时,它总是返回 true。

【问题讨论】:

  • 您说您想查找字符串是否包含列表中存在的任何字符串,但您正在使用equals进行比较。鉴于您的字符串不等于其中任何一个,您找不到匹配项似乎并不奇怪。

标签: c# asp.net linq


【解决方案1】:

你可以试试下面的 linq - 如果在字符串中找到列表中的任何值,则返回false,如果没有找到,则返回true

var result = ro_operandVal.All(c=>lo_operandVal.IndexOf(c) < 0);

更新

两者都是对象类型,并且您知道它们的确切类型,它们是 List&lt;string&gt;string,您可以对它们进行类型转换。

var result = ((List<string>)ro_operandVal).All(c=>lo_operandVal.ToString().IndexOf(c) < 0);

【讨论】:

  • 我更喜欢这种方法。您可能希望使用采用 StringComparisonIndexOf 重载,以便您可以忽略大小写(根据问题中的代码)。
  • ro_operand 和 lo_operand 属于对象类型
  • 你永远不能在你的问题中提到这一点。顺便说一句,当你知道它们的确切类型是 List&lt;string&gt; 而另一个是 string 时,你可以输入它们
  • rextester.com/OEJ33614 看看,我猜它应该返回 true
  • 不,你在你的问题中说,如果存在,那么它应该返回false,所以如果你认为Ali存在于字符串值中,这就是它返回false的原因,而不是Ali 类型为Deepak,它将返回true
【解决方案2】:

使用包含如下:

 result = !(((string[])ro_operandVal).ToList<string>()).Any(x => x.ToString().ToUpper().Contains(lo_operandVal.ToString().ToUpper()));

【讨论】:

    【解决方案3】:

    使用.Contains() 查看文本是否包含在列表中,而不是尝试使用等号运算符精确匹配字符串。

     result = !(((string[])ro_operandVal).ToList<string>()).Any(x => x.ToString().ToUpper().Contains(lo_operandVal.ToString().ToUpper()));
    

    【讨论】:

    • 没问题,您可以通过点击答案下方的edit 自行操作...您还可以删除旧的 cmets,让帖子看起来更干净...
    【解决方案4】:

    以下代码对我来说非常有效

      result = !(((string[])ro_operandVal).ToList<string>().Any(lo_operandVal.ToString().Contains));
    

    忽略大小写:

     result = !((((string[])ro_operandVal).ToList<string>().ConvertAll(d => d.ToUpper())).Any(lo_operandVal.ToString().ToUpper().Contains));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2021-11-26
      • 2014-12-07
      • 1970-01-01
      • 2013-04-29
      相关资源
      最近更新 更多