2014-06-18 46 views
0

測序我的數據表我有一個DataTable看起來象下面這樣:如何使用LINQ

| 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

你已經對數據表進行了排序並想對其進行排序嗎? –

+0

哇,。 Ghost編輯剛剛提出了與之前完全相反的問題。 – Habib

+1

@Habib我相信這是錯誤的(否則它沒有意義) –

回答

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(); 
+0

請親切看我的問題,我更新和恢復我回。在此先感謝 – user3752669

+1

@ user3752669,您不需要group by,您可以在第二個字段中使用OrderBy和ThenBy。 – Habib

+0

感謝habib爲您的寶貴邏輯! :) :) – user3752669

0

VAR listOfStrings =新列表{ 「橙色」, 「橙色」, 「橙色」, 「橙色」, 「芒果」, 「芒果」, 「芒果」, 「芒果」 , 「芒果」, 「芒果」, 「蘋果」, 「蘋果」, 「蘋果」 };

 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]); 
     }