2013-10-11 59 views
0

比方說,我有一個表在這個結構從更大的DataTable中提取DataTable的最快方法?

Id | Name | Product 
------------------- 
1 Name1 Product1 
1 Name1 Product2 
2 Name3 Product3 
3 Name4 Product4 

表被標識在SQL查詢返回其有序。 現在,我想提取包含每個唯一ID的指定行的DataTable。 這意味着使用上面的示例,我應該得到三個包含具有不同Id值的行的DataTable。

+1

你需要反正每一行迭代。您應該嘗試發送另一個SQL查詢,而不是在已獲取的結果中進行搜索。 – MarcinJuraszek

+0

你應該輸出什麼樣的? – Rohit

+1

你想用產品做什麼?首先(MIN),最後(MAX),計數?聽起來你應該在SQL查詢命中數據表之前完成它。 – Tanner

回答

0

試試這個:

string expression = "Id = yourId"; 
DataRow[] foundRows = originalTable.Select(expression); 
1

使用DataView。

var view = new System.Data.DataView(table); 
view.Sort = "id"; 

foreach(var id in new [] {1,2,3}) 
{ 
    view.RowFilter = "id = " + id.ToString(); 
    var result = view.ToTable(); 
} 
1

您可以嘗試linqdatatable實現這一目標,東西像下面(這絕不是久經考驗):

var groupedResults= from r in dataTable.AsEnumerable() 
        group r by r.Field<string>("Id") into g 
        select new 
        { 
         Id = g.Key, 
         Name = g.Min(), 
         Product = g.Count() 
        }; 

的最有效方式在數據表之前可能是直接的SQL:

SELECT Id, Name, MIN(Product) 
FROM [Your_Table] 
GROUP BY Id, Name 

此示例採用第一個Product

爲了獲得產品的Count這樣做:

SELECT Id, Name, COUNT(Product) 
FROM [Your_Table] 
GROUP BY Id, Name