首页 > 解决方案 > LINQ 分组和排序无法按预期工作

问题描述

我的预期输出是:

扩展名:.txt——CATS.TXT——DOGS.TXT 扩展名:.pdf——INFO.PDF——TEST2.PDF 扩展名:.doc——Summary.DOC——TEST1.DOC

以下是功能。

    public void TestGroupByFluentSyntax()
    {
        string[] files = new string[] { "test1.doc", "test2.pdf", "cats.txt", "dogs.txt", "info.pdf", "summary.doc" };

        IEnumerable<IGrouping<string, string>> query = files.GroupBy(file => System.IO.Path.GetExtension(file), file => file.ToUpper())
                                                            .OrderBy(grouping => grouping.Key);

        foreach(IGrouping<string, string> grouping in query)
        {
            Console.WriteLine("Extension: " + grouping.Key);
            foreach (string fileName in grouping)
                Console.WriteLine("   -- " + fileName);
        }
    }

    public void TestGroupByFluentSyntax2()
    {
        string[] files = new string[] { "test1.doc", "test2.pdf", "cats.txt", "dogs.txt", "info.pdf", "summary.doc" };

        IEnumerable<IGrouping<string, string>> query = files.OrderBy(file => file).GroupBy(file => System.IO.Path.GetExtension(file), file => file.ToUpper());

        foreach (IGrouping<string, string> grouping in query)
        {
            Console.WriteLine("Extension: " + grouping.Key);
            foreach (string fileName in grouping)
                Console.WriteLine("   -- " + fileName);
        }
    }

如果我先订购,然后将其分组即可。但是分组和排序没有。我在分组然后订购的函数' TestGroupByFluentSyntax ()'上缺少什么?

标签: linq

解决方案


    This worked:

    public void TestGroupByFluentSyntax()
    {
        Console.WriteLine("TestGroupByFluentSyntax");

        string[] files = new string[] { "test1.doc", "test2.pdf", "cats.txt", "dogs.txt", "info.pdf", "summary.doc" };

        IEnumerable<IGrouping<string, string>> query = files.GroupBy(file => System.IO.Path.GetExtension(file), file => file.ToUpper());

        foreach (IGrouping<string, string> grouping in query)
        {
            Console.WriteLine("Extension: " + grouping.Key);

            foreach (string fileName in grouping.OrderBy(name => name))
                Console.WriteLine("   -- " + fileName);
        }
    }

推荐阅读