Performance LINQ-如何在一个查询中对这些数据进行排序

Performance LINQ-如何在一个查询中对这些数据进行排序,performance,linq,c#-4.0,lambda,Performance,Linq,C# 4.0,Lambda,我想知道是否有任何方法可以使用LINQ对这段数据进行排序: Firstname lastname age Xxxxxxxxx xxxxxxxxx xxxx Xxxxxxxxx xxxxxxxxx xxxx * group YYYY <---- contained at firstName column Xxxxxxxxx xxxxxxxxx xxxx Xxxxxxxxx xxxxxxxxx xxxx * group BBB Xxxxxxxxx

我想知道是否有任何方法可以使用LINQ对这段数据进行排序:

Firstname   lastname    age
Xxxxxxxxx   xxxxxxxxx   xxxx
Xxxxxxxxx   xxxxxxxxx   xxxx
* group YYYY <---- contained at firstName column
Xxxxxxxxx   xxxxxxxxx   xxxx
Xxxxxxxxx   xxxxxxxxx   xxxx
* group BBB
Xxxxxxxxx   xxxxxxxxx   xxxx
Xxxxxxxxx   xxxxxxxxx   xxxx
* group LLL
我已经这样做了,使用For语句,从列表的末尾开始获取组名,然后将该值存储在局部变量中,并用
“group name”
填充组列,然后使用LINQ选择
FirstName
列不包含
*
的所有位置


有什么想法吗?

您可以使用聚合:

public static void Main()
{
    var data = new MyClass[]
    {
        new MyClass{FirstName="Tom"},
        new MyClass{FirstName="Dick"},
        new MyClass{FirstName="Harry"},
        new MyClass{FirstName="* group YYYY"},
        new MyClass{FirstName="Matthew"},
        new MyClass{FirstName="Mark"},
        new MyClass{FirstName="Luke"},
        new MyClass{FirstName="John"},
        new MyClass{FirstName="* group BBB"},
        new MyClass{FirstName="Moe"},
        new MyClass{FirstName="Larry"},
        new MyClass{FirstName="Curly"},
        new MyClass{FirstName="* group LLL"},
    };

    var groups = new Dictionary<string, List<MyClass>>();
    data.Aggregate(new List<MyClass>(), (a, b) =>
    {
        if (b.FirstName.StartsWith("* group "))
        {
            groups[b.FirstName.Substring(8)] = a;
            return new List<MyClass>();
        }
        a.Add(b);
        return a;
    });

    foreach (var group in groups.Keys)
        foreach (var record in groups[group])
            Console.WriteLine("{0} {1}", group, record.FirstName);
}

public class MyClass
{
    public string FirstName { get; set; }
}

显示您当前的代码。哇!!真是太棒了,太强大了。谢谢你,先生。
public static void Main()
{
    var data = new MyClass[]
    {
        new MyClass{FirstName="Tom"},
        new MyClass{FirstName="Dick"},
        new MyClass{FirstName="Harry"},
        new MyClass{FirstName="* group YYYY"},
        new MyClass{FirstName="Matthew"},
        new MyClass{FirstName="Mark"},
        new MyClass{FirstName="Luke"},
        new MyClass{FirstName="John"},
        new MyClass{FirstName="* group BBB"},
        new MyClass{FirstName="Moe"},
        new MyClass{FirstName="Larry"},
        new MyClass{FirstName="Curly"},
        new MyClass{FirstName="* group LLL"},
    };

    var groups = new Dictionary<string, List<MyClass>>();
    data.Aggregate(new List<MyClass>(), (a, b) =>
    {
        if (b.FirstName.StartsWith("* group "))
        {
            groups[b.FirstName.Substring(8)] = a;
            return new List<MyClass>();
        }
        a.Add(b);
        return a;
    });

    foreach (var group in groups.Keys)
        foreach (var record in groups[group])
            Console.WriteLine("{0} {1}", group, record.FirstName);
}

public class MyClass
{
    public string FirstName { get; set; }
}
YYYY Tom
YYYY Dick
YYYY Harry
BBB Matthew
BBB Mark
BBB Luke
BBB John
LLL Moe
LLL Larry
LLL Curly