【发布时间】:2020-05-07 20:31:41
【问题描述】:
我有一个包含许多数据表的数据集(至少一个表,可能更多)。有没有一种简单的方法来检查整个 DataSet 是否有重复记录?
通过重复,我的意思是:
每张表代表一个Student对象,有StudentId、StudentName、NumberId三列(本项目中Students可以属于Numbers)。我需要一种方法来查看同一个 Student 是否存在于两个或多个表中,也就是说,同一个 StudentId 是否出现在任何表的多行中?
我试过了——
protected void CheckForDuplicateStudents()
{
DataSet setStudents = new DataSet();
foreach (GridViewRow gvr in grdNumbers.Rows)//grdNumbers on html page
{
int numberId = int.Parse(grdNumbers.DataKeys[gvr.RowIndex].Value.ToString());
//for each row in the grid, get the student enrollent as a dt
//put each dt into the dset
DataTable tblRoster = PerformanceAccess.GetStudentsInNumber(numberId);
setStudents.Tables.Add(tblRoster);
}
var duplicatedRowsExist = dsetStudents.Tables[0].AsEnumerable()
.GroupBy(r => r, DataRowComparer.Default)
.Any(g => g.Count() > 1);`
//do stuff here if query returns any duplicate records
}
但据我了解,此 LINQ 查询(和类似查询)仅检查单个数据表中的重复值,而不检查集合中的所有表。
有没有直接的方法来做到这一点?
编辑——我要澄清一下,每个表都有多行,其中每一行代表一个学生
`
【问题讨论】:
-
我不明白你的配置。 table 的目的是存储多条记录,其中包含定义要存储在那里的实体(多个)的数据。我了解到您有多个表,每个表都存储一个学生记录。对吗?
-
@Steve - 很抱歉,如果不清楚 - 每张桌子都会有多个学生。如果相关,该数据集表示一个 Performance 的整个花名册,其中包含多个 Number,每个 Number 可以有多个 Student。 (表现 > 人数 > 学生)
-
为什么要跨多个表存储学生?如果有一些差异,比如学年或班级,可以很容易地用新的列或属性来表示。
-
@Nyssa - 我在上面添加了更多代码,希望它更清楚。表格是根据 gridview 的行获取的
-
你说的是,你有多个具有完全相同结构的表。这是非常不寻常的。将同一个学生放在同一个数据库的多个表中不是标准化数据。
标签: c# datatable duplicates dataset