【问题标题】:LINQ - How can I sort this data in one queryLINQ - 如何在一个查询中对这些数据进行排序
【发布时间】:2014-02-09 21:02:33
【问题描述】:

我想知道是否有任何方法可以使用 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

收件人:

Group       Firstname   lastname    age
YYYY        Xxxxxxxxx   xxxxxxxxx   xxxx
YYYY        xxxxxxxxx   xxxxxxxxx   xxxx 
BBB         Xxxxxxxxx   xxxxxxxxx   xxxx 
BBB         Xxxxxxxxx   xxxxxxxxx   xxxx
LLL         Xxxxxxxxx   xxxxxxxxx   xxxx
LLL         xxxxxxxxx   xxxxxxxxx   xxxx

我已经做到了,使用 For 语句,从列表的末尾开始获取组名,然后将该值存储在局部变量中并继续用 “group name” 填充组列,然后我使用 LINQ 选择所有位置FirstName 列不包含 *

有什么想法吗?

【问题讨论】:

  • 显示您当前的代码。

标签: performance linq c#-4.0 lambda


【解决方案1】:

您可以使用聚合来做到这一点:

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

【讨论】:

  • 哇!只是惊人的和强大的。谢谢先生。
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
相关资源
最近更新 更多