如何从多对一关系中获取唯一记录 table

How to get unique record from many to one relationship table

我被卡住了,找不到任何帮助。我想做的是通过 IDSTUDENTS_DETAILS 获取唯一记录table。 STUDENTS_DETAILS table 与 STUDENTS[=22 存在多对一关系=].

var query = (from x in OracleDb.STUDENTS_DETAILS
             join y in OracleDb.STUDENTS on x.ID equals y.ID
             select new StudentViewModel()
             {
                 ID = x.ID,
                 APPLICATION_DATE = x.APPLICATION_DATE,
                 STUDENT_JOINED_DATE = y.STUDENT_JOINED_DATE,
                 SCHEME = y.SCHEME
             }).OrderByDescending(a => a.APPLICATION_DATE).ToList();

由于学生和 STUDENTS_DETAILS 之间存在一对多关系,我猜测 STUDENTS_DETAILS 中的数据对于学生来说是不同的。

在这种情况下,对于 STUDENTS_DETAILS table 中的不同数据,同一个学生记录将被加载多次。做 Distinct 是行不通的。你必须做 GroupBy.

示例:

var results = from s in STUDENTS group s.Detail by s.ID into g select new { ID = g.Key, Details = g.ToList() };

对于以下数据:

 { ID = 1, APPLICATION_DATE = "2/2/2019", SCHEME = "A" }; 
 { ID = 1, APPLICATION_DATE = "2/2/2019", SCHEME = "B" }; 
 { ID = 2, APPLICATION_DATE = "3/2/2019", SCHEME = "C" }; 

由于 SCHEME 属性 中的值,您将得到三行而不是两行。要让每个学生一行,您必须决定如何按 ID 以外的所有其他属性进行分组。例如获取最大长度数据和最大日期等

当你想获得唯一记录时,你需要考虑其他因素,因为你可能有重复的 ID 记录,就像@Rahatur 在他的回答中提到的这个例子:

 { ID = 1, SCHEME = "A" }; 
 { ID = 1, SCHEME = "B" }; 

它们可能有重复的 ID 记录,但它们是唯一的,因为它们具有唯一的 Scheme 字段。这是你的考虑之一。现在,如果这与您需要的结果无关,而您只想获得唯一的 ID 记录,那么您可能想试试这个:

var result = query.GroupBy(y => y.ID).Select(y => y.FirstOrDefault()).ToList();

这将获取序列的第一个元素,并确保您的记录集结果具有唯一性 ID