Asp.net mvc 如何从多对一关系表中获取唯一记录
我被卡住了,找不到任何帮助。我想做的是通过ID从STUDENTS\u DETAILS表中获取唯一记录STUDENTS\u DETAILS表与STUDENTS有多对一关系Asp.net mvc 如何从多对一关系表中获取唯一记录,asp.net-mvc,linq,entity-framework-5,Asp.net Mvc,Linq,Entity Framework 5,我被卡住了,找不到任何帮助。我想做的是通过ID从STUDENTS\u DETAILS表中获取唯一记录STUDENTS\u DETAILS表与STUDENTS有多对一关系 var query = (from x in OracleDb.STUDENTS_DETAILS join y in OracleDb.STUDENTS on x.ID equals y.ID select new StudentViewModel()
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表中的不同数据,将多次加载相同的学生记录。执行
Distinct
将不起作用。您必须执行GroupBy
例如:
var结果=来自学生中的
按s.ID将s.详细信息分组为g
选择新{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之外的所有其他属性进行分组。例如,取最大长度数据和max日期等 当你想获得唯一记录时,需要考虑其他因素,因为在这个例子中你可能有类似ID的重复记录,如@ <强> RATAUR < /强>。答复:
{ ID = 1, SCHEME = "A" };
{ ID = 1, SCHEME = "B" };
它们可能有重复的ID记录,但它们是唯一的,因为它们有唯一的Scheme字段。这是你的考虑之一。现在,如果这与您需要的结果无关,并且您只想获得记录的唯一ID
,那么您可能需要尝试以下方法:
var result = query.GroupBy(y => y.ID).Select(y => y.FirstOrDefault()).ToList();
这将获取序列的第一个元素,并确保记录集结果上有唯一的ID
。使用Distinct()方法