DataSet auswählen übergeordneter Zeilen, in denen die untergeordneten Zeilen enthält den Wert x
Habe ich zwei DataTables
im DataSet
miteinander durch ein DataRelation
und ich bin versucht zu wählen, alle übergeordneten Zeilen mit einem Kind Zeile mit Wert x.
Der übergeordneten Tabelle enthält Produkte und die child-Tabelle enthält die Kategorien, die das Produkt in.
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"]));
BEARBEITEN
Habe ich zusammengebastelt dieses Stück von Linq-code, welcher funktioniert, aber scheint sinnlos, mit einem 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;
- Fühlen Sie sich frei, um Ihre eigene Frage zu beantworten, wenn Ihre Antwort für Sie arbeitet.
- es funktioniert, aber es scheint ein bisschen dumm zu haben, wieder eine Beziehung, wenn es schon eine Beziehung gibt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
statt:
Weil Sie schon schaffen Beziehung zwischen zwei Tabellen mit gemeinsamen Spalte "entity_id",so lange, wie Sie entity_id abgestimmt ist, bekommen Sie Ihre gewünschte Ergebnis.
DataRow[] childRows = dsProducts.Tables["categories"]
und Beziehung sein sollteentity_id