Как получить уникальную запись из многих в одну таблицу отношений - PullRequest
1 голос
/ 12 июня 2019

Я застрял и не могу найти никакой помощи по этому вопросу.Я пытаюсь получить уникальную запись по ID из STUDENTS_DETAILS таблицы. STUDENTS_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();

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Вам необходимо учитывать другие факторы, когда вы хотите получить уникальные записи, поскольку у вас может быть дубликат записи ID, как в этом примере, как упомянуто @ Рахатур в его ответе:

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

Возможно, они имеют дубликат записи ID, но они уникальны, поскольку имеют уникальное поле Схема.Это одно из ваших соображений.Теперь, если это не зависит от вашего необходимого результата, и вы просто хотите получить уникальный ID вашей записи, тогда вы можете попробовать это:

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

Это получит Первый элемент вашегопоследовательности и убедитесь, что у вас есть уникальный ID в результатах набора записей.

1 голос
/ 12 июня 2019

Так как между STUDENTS и STUDENTS_DETAILS имеется отношение один ко многим, я предполагаю, что данные в STUDENTS_DETAILS различаются для студента.

В этом случае для разных данных в таблице STUDENTS_DETAILS одна и та же запись студента будетзагружаться несколько раз.Выполнение 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.Чтобы получить по одной строке на каждого учащегося, вы должны решить, как группировать по всем другим свойствам, кроме идентификатора.например, взять максимальную длину данных и максимальную дату и т. д.

...