Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何比较这两个字符串_C#_Sql - Fatal编程技术网

C# 如何比较这两个字符串

C# 如何比较这两个字符串,c#,sql,C#,Sql,我有一个关于如何比较两个字符串的问题 这是代码 string stringA = "This is a test item"; string stringB = "item test a is This"; 显然,stringB包含stringA中的每个单词,但顺序不同 我期望的结果应该是真实的 我的问题是,我该怎么办?我尝试使用.Contains()方法,但结果为FALSE 谢谢大家 更新 谢谢大家的友好回复 以下是我的澄清 实际上,我正在使用LINQ和EF构

我有一个关于如何比较两个字符串的问题

这是代码

        string stringA = "This is a test item";
        string stringB = "item test a is This";
显然,stringB包含stringA中的每个单词,但顺序不同

我期望的结果应该是真实的

我的问题是,我该怎么办?我尝试使用.Contains()方法,但结果为FALSE

谢谢大家

更新

谢谢大家的友好回复

以下是我的澄清

实际上,我正在使用LINQ和EF构建一个数据库搜索功能

假设一个项目的名称为“这是一个测试项目”

如果用户输入“test a is this”,我希望函数足够智能,能够捕获上面提到的项目

有什么建议吗

另一次更新

再次感谢你的帮助

我确实喜欢彼得·里奇、codesparkle、戴夫和埃德弗雷德的建议。

试试这种方法:

  • 将每个字符串中的每个单词放入字符串数组中
  • 按字母顺序对每个单词数组排序
  • 比较数组是否相等
尝试以下方法:

  • 将每个字符串中的每个单词放入字符串数组中
  • 按字母顺序对每个单词数组排序
  • 比较数组是否相等
编辑 哎呀。错误的方法。那会教我回答得太快

我认为这应该是可行的:

stringA.Split(' ').OrderBy(w => w).SequenceEqual(stringB.Split(' ').OrderBy(w => w));
编辑 哎呀。错误的方法。那会教我回答得太快

我认为这应该是可行的:

stringA.Split(' ').OrderBy(w => w).SequenceEqual(stringB.Split(' ').OrderBy(w => w));

我将进行两阶段比较:

  • 使用.Split(“”)方法按“”拆分字符串,并确保它们具有相同数量的元素(.Count属性)

  • 将新创建的数组(拆分字符串)强制转换为集合,并执行集合差异B联合B集合差异a

  • 如果测试1通过,并且集合差异的并集创建的集合中没有任何元素(在测试2中),则您已经成功地比较了字符串中的单词,如上所述


    Michael G.

    我将进行两阶段比较:

  • 使用.Split(“”)方法按“”拆分字符串,并确保它们具有相同数量的元素(.Count属性)

  • 将新创建的数组(拆分字符串)强制转换为集合,并执行集合差异B联合B集合差异a

  • 如果测试1通过,并且集合差异的并集创建的集合中没有任何元素(在测试2中),则您已经成功地比较了字符串中的单词,如上所述


    Michael G.

    您可以在空白处拆分字符串并比较两个结果集合。您可以从linq使用:

    如果第一个字符串中的单词位于集合words1中,而第二个字符串中的单词位于words2中,则可以执行以下操作:

    if(!words1.Intersect(words2).Except( words1).Any()) -> your sentences are 'equal'
    

    您可以在空白处拆分字符串并比较两个结果集合。您可以从linq使用:

    如果第一个字符串中的单词位于集合words1中,而第二个字符串中的单词位于words2中,则可以执行以下操作:

    if(!words1.Intersect(words2).Except( words1).Any()) -> your sentences are 'equal'
    

    “String.Split”用空格分隔符分隔单词,将结果数组排序到列表中,然后比较列表。例如:

    var x = new List<string>(stringA.Split(' '));
    x.Sort();
    var y = new List<string>(stringB.Split(' '));
    y.Sort();
    bool areEqual = x.SequenceEqual(y);
    
    var x=新列表(stringA.Split(“”));
    x、 排序();
    变量y=新列表(stringB.Split(“”));
    y、 排序();
    bool areEqual=x.SequenceEqual(y);
    
    更新如果不区分大小写:

    var x = new List<string>(stringA.Split(' '));
    x.Sort();
    var y = new List<string>(stringB.Split(' '));
    y.Sort();
    bool areEqual = x.SequenceEqual(y, StringComparer.OrdinalIgnoreCase);
    
    var x=新列表(stringA.Split(“”));
    x、 排序();
    变量y=新列表(stringB.Split(“”));
    y、 排序();
    bool areEqual=x.SequenceEqual(y,StringComparer.OrdinalIgnoreCase);
    

    但是,如果要查找将在SQL Server中执行的内容,则可能需要其他内容。

    'String.Split'使用空格分隔符拆分单词,将生成的数组排序到列表中,然后比较列表。例如:

    var x = new List<string>(stringA.Split(' '));
    x.Sort();
    var y = new List<string>(stringB.Split(' '));
    y.Sort();
    bool areEqual = x.SequenceEqual(y);
    
    var x=新列表(stringA.Split(“”));
    x、 排序();
    变量y=新列表(stringB.Split(“”));
    y、 排序();
    bool areEqual=x.SequenceEqual(y);
    
    更新如果不区分大小写:

    var x = new List<string>(stringA.Split(' '));
    x.Sort();
    var y = new List<string>(stringB.Split(' '));
    y.Sort();
    bool areEqual = x.SequenceEqual(y, StringComparer.OrdinalIgnoreCase);
    
    var x=新列表(stringA.Split(“”));
    x、 排序();
    变量y=新列表(stringB.Split(“”));
    y、 排序();
    bool areEqual=x.SequenceEqual(y,StringComparer.OrdinalIgnoreCase);
    

    但是,如果您正在寻找将在SQL Server中执行的内容,则可能需要其他内容。

    我会将字符串拆分为标记,并测试stringA中的所有标记是否都存在于stringB的标记列表中。比如:

    var stringBTokens = stringB.Split(" ");
    foreach(string token in stringA.Split(" "))
    {
        if(stringBTokens.Contains(token) == false) return false;
    }
    return true;
    
    可能有一些奇怪的正则表达式可以做到这一点,但这是一个相当直接的测试。如果您想获得更多乐趣,可以使用Linq Any方法,如下所示:

    var stringBTokens = stringB.Split(" ");
    return !stringBTokens.Any(token => stringA.Contains(token));
    
    这基本上是做同样的事情,只是后者我觉得更优雅一点。我希望没有错误,我使用的是macbook pro,没有安装任何与.net相关的(或mono等)来验证这一点

    更新

    string stringA = "This is a test item";
    string stringB = "item test a is This";
    string stringC = "Not the Same is This";
    bool result = stringA.ContainsSameWordsAs(stringB);    // true
    bool different = stringA.ContainsSameWordsAs(stringC); // false
    
    根据你的澄清,我想看看


    这听起来像是你想要达到的目标。我以前创建这些标记是为了在数据库中进行快速文本搜索,它非常有效。

    我会将字符串拆分为标记,并测试stringA中的所有标记是否都存在于stringB的标记列表中。比如:

    var stringBTokens = stringB.Split(" ");
    foreach(string token in stringA.Split(" "))
    {
        if(stringBTokens.Contains(token) == false) return false;
    }
    return true;
    
    可能有一些奇怪的正则表达式可以做到这一点,但这是一个相当直接的测试。如果您想获得更多乐趣,可以使用Linq Any方法,如下所示:

    var stringBTokens = stringB.Split(" ");
    return !stringBTokens.Any(token => stringA.Contains(token));
    
    这基本上是做同样的事情,只是后者我觉得更优雅一点。我希望没有错误,我使用的是macbook pro,没有安装任何与.net相关的(或mono等)来验证这一点

    更新

    string stringA = "This is a test item";
    string stringB = "item test a is This";
    string stringC = "Not the Same is This";
    bool result = stringA.ContainsSameWordsAs(stringB);    // true
    bool different = stringA.ContainsSameWordsAs(stringC); // false
    
    根据你的澄清,我想看看

    这听起来像是你想要达到的目标。我以前创建这些是为了在中进行快速文本搜索