Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据集选择子行包含x值的父行_C#_Linq_Dataset_Datarelation - Fatal编程技术网

C# 数据集选择子行包含x值的父行

C# 数据集选择子行包含x值的父行,c#,linq,dataset,datarelation,C#,Linq,Dataset,Datarelation,我在一个数据集中有两个数据表,它们通过数据关系链接在一起,我正试图选择所有父行,其中子行的值为x 父表包含产品,子表包含产品所在的类别 DataSet dsProducts = new DataSet(); DataTable dtProducts = new DataTable("products"); dtProducts.Columns.Add("entity_id", typeof(int)); dtProducts.Columns.Add("sku", typeof(string))

我在一个
数据集中有两个
数据表
,它们通过
数据关系
链接在一起,我正试图选择所有父行,其中子行的值为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;
var rows=来自dsProducts.Tables[“products”].AsEnumerable()中的产品
在dsProducts.Tables[“categories”]中加入cats。prods.Field(“entity_id”)上的AsEnumerable()等于cats.Field(“entity_id”)
其中cats.Field(“category_id”)==id
选择产品;
试试:

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

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

因为您已经用公共列“entity\u id”在两个表之间创建了关系,所以只要您的entity\u id匹配,就可以得到您想要的结果。

这将返回具有该entity\u id的所有产品。我正在寻找仅属于特定类别的产品行集。它不应该是childrows
DataRow的类别吗[]childRows=dsProducts.表[“类别”]
和关系应该是
实体id
如果您的答案对您有效,请随意回答您自己的问题。这是可行的,但如果已经存在关系,则必须重新创建关系似乎有点愚蠢。
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
}