如何从多对一关系中获取唯一记录 table
How to get unique record from many to one relationship table
我被卡住了,找不到任何帮助。我想做的是通过 ID 从 STUDENTS_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
。
我被卡住了,找不到任何帮助。我想做的是通过 ID 从 STUDENTS_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
。