我有一个名为test_results
的DataTable,其中包含以下列:
和名为students
的DataTable,其中包含以下列:
我想在表之间创建一个DataRelation,这样我就可以获得所有test_results
行
其中x是来自students
我想这样做,以便我可以快速循环学生并找到他们的数学结果:
foreach (DataRow[] student in students){
DataRow[] mathResults = student.GetChildRows( "relation_student_math_results" );
foreach (DataRow[] mathResult in mathResults ){
// do something
}
}
答案 0 :(得分:1)
对DataRelation进行Intitialzing非常简单;你可以使用基本的构造函数。在你的情况下,像:
DataRelation studentResultsRelation = new DataRelation("StudentResults", students.Columns["student_id"], test_results.Columns["student_id"]);
parentDataSet.Relations.Add(studentResultsRelation);
其中parentDataSet是包含两个数据表的数据集。
然而,这是一个有点棘手的地方。您无法直接查询数据关系,因为它只定义了两个表之间的关系。你可以做的是:
1)找到与您想要的学生匹配的行:
int studentId = 42;
DataRow[] studentRow = students.Select(String.Format("student_id = {0}"), studentId);
2)然后,您可以利用DataRelation来检索所有学生的成绩:
//Assumes 1 student row matched your query! Check for 0 rows and more than 1, too!
DataRow[] studentResults = studentRow[0].GetChildRows(studentResultsRelation);
然后你可以循环这些来找到数学结果:
List<DataRow> mathResults = new List<DataRow>();
foreach(DataRow resultRow in studentResults){
if(Convert.ToString(resultRow["subject"]).Trim().ToUpper() == "MATH")
{
mathResults.Add(resultRow);
}
}
我可以看到你已经拥有了大部分内容,而且我理解你想要对数据关系做些什么;但是,我不相信你可以直接使用它 - 相反,你首先必须在子(GetParentRow [s])或父表(GetChildRow [s])中找到你想要的行,然后关系允许你快速找到匹配的行集。然后,您可以根据需要过滤这些内容。
顺便说一句,这是一个使用数据库查询的更简单的练习。
希望这有帮助!