我有DataTable
,如下所示:
| ItemName | ItemPro
A HWH
A BRB
A EAH
B HWH
B BRB
B EAH
B HWH
C BRB
C EAH
我希望按DataTable
对ItemName
进行分组并对这些组进行排序
我怎样才能做到这一点?
注意:排序后,我想要我的表格如下;
| ItemName | ItemPro
A HWH
B BRB
c EAH
A HWH
B BRB
C EAH
A HWH
B BRB
B EAH
答案 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]);
}