2012-01-16 47 views
2

我有兩個DataTablesDataSet通過DataRelation鏈接在一起,我試圖選擇具有值爲x的子行的所有父行。DataSet選擇其父行包含x值的父行

父表中包含的產品和子表中包含的類別,該產品是英寸

DataSet dsProducts = new DataSet(); 

DataTable dtProducts = new DataTable("products"); 
dtProducts.Columns.Add("entity_id", typeof(int)); 
dtProducts.Columns.Add("sku", typeof(string)); 
dtProducts.Columns.Add("mpn", typeof(string)); 
dtProducts.Columns.Add("brand", typeof(string)); 
dtProducts.Columns.Add("name", typeof(string)); 
dtProducts.Columns.Add("description", typeof(string)); 
dtProducts.Columns.Add("short_description", typeof(string)); 
dtProducts.Columns.Add("image", typeof(string)); 
dtProducts.Columns.Add("weight", typeof(double)); 
dtProducts.Columns.Add("qty", typeof(double)); 
dtProducts.Columns.Add("cost", typeof(double)); 
dtProducts.Columns.Add("price", typeof(double)); 
dtProducts.PrimaryKey = new DataColumn[] { dtProducts.Columns["entity_id"] }; 
dsProducts.Tables.Add(dtProducts); 

DataTable dtCategories = new DataTable("categories"); 
dtCategories.Columns.Add("entity_id", typeof(int)); 
dtCategories.Columns.Add("category_id", typeof(int)); 
dsProducts.Tables.Add(dtCategories); 

dsProducts.Relations.Add(new DataRelation("entity_id", dtProducts.Columns["entity_id"], dtCategories.Columns["entity_id"])); 

編輯

我拼湊這片LINQ的代碼工作但似乎沒有意義DataRelation

var rows = from prods in dsProducts.Tables["products"].AsEnumerable() 
      join cats in dsProducts.Tables["categories"].AsEnumerable() on prods.Field<int>("entity_id") equals cats.Field<int>("entity_id") 
      where cats.Field<int>("category_id") == id 
      select prods; 
+0

如果您的答案適合您,請隨時回答您自己的問題。 – 2012-01-16 21:09:43

+0

它的工作原理,但是在那裏已經存在關係時,必須重新創建一個關係似乎有點愚蠢。 – Christian 2012-01-16 21:14:53

回答

1

嘗試:

DataRow[] rows = dsProducts.Tables["products"].Select("entity_id=" + id); 

代替:

DataRow[] rows = dsProducts.Tables["products"].Select("Child(entity_id).category_id = " + id); 

因爲你已經創建了兩個表,公共列「ENTITY_ID」之間的關係,所以只要你ENTITY_ID匹配,你得到你想要的結果。

+0

,它將帶回所有具有該entity_id的產品。我尋找只在特定類別產品的行集 – Christian 2012-01-16 18:41:26

0
DataRelation relation = dsProducts.Relations.Add(new DataRelation("entity_id", dtProducts.Columns["entity_id"], dtCategories.Columns["entity_id"])); 

DataRow[] childRows = dsProducts.Tables["categories"].Select("category_id=" + id); 
foreach (DataRow row in childRows) { 
    DataRow[] parentRows = row.GetParentRows(relation); // parentRows[0] should be your parent 
} 
+0

不應該是兒童的類別DataRow [] childRows = dsProducts.Tables [「類別」]「和關係應該是'entity_id' – Christian 2012-01-16 18:58:50

+0

@Christian:你是正確。固定。 – 2012-01-16 20:27:32