比较C#LINQ中的子字符串

时间:2014-08-20 05:58:38

标签: c# compare substring

我是编程和学习C#的新手。本章向我介绍了数据库和SQL结构,然后迅速进入LINQ。所以我在这一点上的理解是非常基础的。我的任务:

创建一个名为SplitAlphabet的程序,其中包含您选择的20个单词的数组。使用LINQ语句显示单独的列表:一个显示在字母表的前半部分以字母开头的单词(A到M),另一个列表显示在后半部分(N到Z)以字母开头的单词。

我试图让它在LINQ中运行然后决定备份一下,然后在C#中执行它以确保我的语法正确。

private void btnDisplay_Click(object sender, EventArgs e)
{
    lstResults1.Items.Clear();
    lstResults2.Items.Clear();
    string[] strings = {"book", "zebra"};
    string subtrResult = strings[0].Substring(0,1);
    var substCompare = strings[0].Compare((strings[0].Substring(0, 1)), "n");
    lstResults1.Items.Add(subtrResult);
    lstResults2.Items.Add(substCompare);
    /*
     var AM =
        from x in strings
        where (x.CompareTo((x.Substring(0, 1)), "n")) == -1
        select x;
    */
}

substrResult"b"列表框中成功显示lstResults1。显示substcompare变量的错误是:

  

无法使用。访问成员'string.Compare(string,string)'   实例参考;用类型名称来限定它。

我用int和decimal替换了var,消息保持不变。

我也不知道这是否像我希望的那样容易转换为LINQ。

2 个答案:

答案 0 :(得分:0)

正如您从错误消息中看到

  Member 'string.Compare(string, string)' cannot be accessed with an instance reference; qualify it with a type name instead.

您应该使用 类型名称 (即String)而不是 实例 ({ {1}}):

strings[0]

Linq查询应该是这样的:

 var substCompare = String.Compare(strings[0].Substring(0, 1), "n");

请注意, var AM = from x in strings where (String.Compare(x.Substring(0, 1), "n")) < 0 select x; 不一定返回Compare,但任何负数

答案 1 :(得分:0)

小心,方法Compare是一种静态方法。您可以使用String类访问它。 像这样:

String.Compare((strings[1].Substring(0, 1)), "n");

你可以这样得到你的清单:

        List<String> lstResults1 = new List<string>();
        List<int> lstResults2 = new List<int>();
        lstResults1.Clear();
        lstResults2.Clear();
        string[] strings = { "book", "zebra" };
        string subtrResult = strings[0].Substring(0, 1);
        var substCompare = String.Compare((strings[1].Substring(0, 1)), "n");
        lstResults1.Add(subtrResult);
        lstResults2.Add(substCompare);

        var AM =
            from x in strings
            where (String.Compare((x.Substring(0, 1)), "n")) < 0
            select x;
        var NZ =
            from x in strings
            where !AM.Contains(x)
            select x;