Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何从多对一关系表中获取唯一记录_Asp.net Mvc_Linq_Entity Framework 5 - Fatal编程技术网

Asp.net mvc 如何从多对一关系表中获取唯一记录

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()

我被卡住了,找不到任何帮助。我想做的是通过IDSTUDENTS\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()
             {
                 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()方法