如何使用linq对数据表进行排序

时间:2014-06-18 13:13:57

标签: linq c#-4.0 datatable

我有DataTable,如下所示:

| ItemName | ItemPro

 A         HWH  
 A         BRB  
 A         EAH  
 B         HWH  
 B         BRB  
 B         EAH  
 B         HWH  
 C         BRB  
 C         EAH 

我希望按DataTableItemName进行分组并对这些组进行排序

我怎样才能做到这一点?

注意:排序后,我想要我的表格如下;

| ItemName | ItemPro

 A         HWH  
 B         BRB  
 c         EAH  
 A         HWH  
 B         BRB  
 C         EAH  
 A         HWH  
 B         BRB  
 B         EAH 

2 个答案:

答案 0 :(得分:1)

您不必按ItemName对您的值进行分组,而是可以在ItemName上应用排序,例如:

var sortedQuery = dt.AsEnumerable()
                    .OrderBy(r=> r.Field<string>("ItemName"));

如果您希望对第二个字段进行排序,请使用Enumerable.ThenBy,如:

var sortedQuery = dt.AsEnumerable()
        .OrderBy(r => r.Field<string>("ItemName"))
        .ThenBy(r => r.Field<string>("ItemPro"));                     

如果您想要一个新的DataTable,那么:

DataTable sortedDt = dt.AsEnumerable()
                        .OrderBy(r => r.Field<string>("ItemName"))
                        .ThenBy(r => r.Field<string>("ItemPro"))
                        .CopyToDataTable();

答案 1 :(得分:0)

var listOfStrings = new List {     &#34;橙色&#34 ;,     &#34;橙色&#34 ;,     &#34;橙色&#34 ;,     &#34;橙色&#34 ;,     &#34;芒果&#34 ;,     &#34;芒果&#34 ;,     &#34;芒果&#34 ;,     &#34;芒果&#34 ;,     &#34;芒果&#34 ;,     &#34;芒果&#34 ;,     &#34;苹果&#34 ;,     &#34;苹果&#34 ;,     &#34;苹果&#34; };

        var groupedStrings = listOfStrings.GroupBy(i => i)
            .Select(i => new { i.Key, Items = i.ToList() }).ToList();

        var maxGroupSize = groupedStrings.OrderByDescending(i => i.Items.Count).First()
            .Items.Count;

        var finalList = new List<string>();

        for (var i = 0; i < maxGroupSize; i++)
        {
            finalList.AddRange(from wordGroup in groupedStrings
                               where i < wordGroup.Items.Count
                               select wordGroup.Items[i]);
        }