【问题标题】:Find List of string in List of strings simplify like in SQL在字符串列表中查找字符串列表,就像在 SQL 中一样简化
【发布时间】:2022-01-05 10:24:26
【问题描述】:

我想弄清楚如何才能在字符串列表中找到我的字符串列表。

我找到了其他解决方案,但大多数都只在字符串列表中找到一个单词,但我的不同。

为了简单易懂,我编写了一个 SQL 脚本,实现了我在 C# 中需要的目标。谢谢。

*;WITH cteFindTheseWords (Word) AS (
    SELECT 'One' UNION ALL
    SELECT 'Two' UNION ALL
    SELECT 'Three' UNION ALL
    SELECT 'Four' 
), cteFindWordsHere (FindHere) AS (
    SELECT 'One Two' UNION ALL
    SELECT 'Earth' UNION ALL
    SELECT 'Land Four' UNION ALL
    SELECT 'The One' UNION ALL
    SELECT 'Hello Wolrd' UNION ALL
    SELECT 'World Everest' UNION ALL
    SELECT 'Then now Two' 
)
SELECT *
FROM cteFindWordsHere a
    JOIN cteFindTheseWords b ON a.FindHere LIKE '%'+ b.Word +'%'*

【问题讨论】:

  • 按照此问题提出可以为您提供更好答案的问题 - stackoverflow.com/help/how-to-ask
  • 您可以 foreach 第一个元素,然后是第二个元素,并检查这些元素 el1.Equals(el1) 是否相等,您是否匹配并执行您想要的业务逻辑。
  • “输入您的问题”文本框上方的{ }按钮可用于格式化代码

标签: c# sql compare contains except


【解决方案1】:

你需要在这里解决3个问题:

  1. 测试字符串是否包含给定的子字符串
  2. 任意多个子字符串测试上述条件
  3. 将此应用于字符串列表

要测试给定子字符串(即"One")是否出现在给定字符串(即“一二”)中,您可以使用the string.IndexOf() method

var indexOfSubstring = "One Two".IndexOf("One");
if(indexOfSubstring >= 0){
    // substring was found in string
}

要测试子字符串列表中的任何是否符合上述条件,我们可以使用the LINQ Any() method

var substrings = new string[] { "One", "Two", "Three", "Four" };
substrings.Any(s => "One Two".IndexOf(s) >= 0)

最后,要过滤整个字符串列表,我们可以使用the LINQ Where() method

var strings = new string[] { "One Two", "Earth", "Land Four", "The One", "Hello Wolrd", "World Everest", "Then now Two" };
var substrings = new string[] { "One", "Two", "Three", "Four" };

var filteredList = strings.Where(w => substrings.Any(s => w.IndexOf(s) >= 0)).ToList();

如果需要区分大小写的i比较,请将StringComparison 实例传递给IndexOf() 调用:

var filteredList = strings.Where(w => substrings.Any(s => w.IndexOf(s, StringComparison.CurrentCultureIgnoreCase) >= 0)).ToList();

【讨论】:

  • 太棒了!这对我有用!大量的解释。非常感谢,伙计。你救了我。 :)
  • @Jog 不客气!如果这回答了您的问题,请考虑通过单击左侧的复选标记将其标记为“已接受”:)
  • 为什么不Contains?比IndexOf使用更简单
  • @CaiusJard 如果用例始终是区分大小写的序数比较,那么是的,Contains() 是“更简单”的选择。我更喜欢IndexOf() 的原因是有机会指定StringComparison 类型,如答案底部所示:)
  • 另请注意,此代码在输出的宽度和长度方面与发布的 SQL 略有不同
猜你喜欢
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2022-07-07
  • 2023-04-03
  • 2019-11-17
相关资源
最近更新 更多