Небольшие замечания:
1. Перед тем как копировать сюда код, лучше его скопипастить в блокнот, там его отформатировать (удалить слева лишние табы), а потом только из блокнота копипастить сюда. Тяжело воспринимать плохо отформатированный код, особенно когда его много.
2. Очень тяжело читать код с непонятными наименованиями. Лучше придерживаться традиции именования на нормальном английском языке. Закрепите в браузере страницу с гугл переводчиком и при необходимости перевести на английский - дело пары секунд. Никаких сокращений, поля в моделях - только первая буква большая. Некоторые наименования я так и не понял, что Вы ими обозначили.
3. Преподаватель предмета, это пользователь, значит и привязывать надо не по его имени, а по его Id. Вместо
var jlist = db.Jpredmets.Where(j => j.PREPODIIN == User.Identity.Name).ToList();
лучше
var lessons = db.Lessons.Where(j => j.TeacherId == User.Id).ToList();
4. Дальше пытаюсь разобраться, что и как Вы хотите найти
var pr = db.Jpredmets.FirstOfDefault(gr => gr.ID == id).GR;
Что такое GR я так и не понял. Можно подумать, что сущность группы, но он string. Имя группы? Каждый предмет привязан к конкретной группе?
Мой вариант как должно быть
var group = db.Lessons.Find(l => l.Id == id).Group;
где Group - сущность, которая связана с lesson как один-ко-многим. Примерная модель
public class Group
{
public int Id { get; set; }
public string Name { get; set; } // название группы
public ICollection<Lesson> Lessons { get; set; } // предметы
public ICollection<Learner> Learners { get; set; } // ученики
}
var kont = db.Kontingents.Where(k => k.GRUPPA == pr).ToList();
Что такое kontingents? Ученики? Тогда мой вариант выглядел бы так
var learners = db.Learners.Where(k => k.GroupId == group.Id);
var jocenki = db.Jpredmets.Include(t => t.Jjours).FirstOrDefault(t => t.ID == id);
Чтотако Jjours я даже интуитивно догадаться не смог. Судя по модели, это сущность которая хранит в себе оценку, дату, когда ее поставили и т.д. Но результат Вы назвали jocenki, а оценок там не будет. Там будут предметы в которых сразу же будут подтянуты данные о Jjours. И вы опять находите предмет, который уже нашли, когда искали группу. Можно было сделать так
var lesson = db.Lessons.Find(l => l.Id == id).Include(t => t.Jjours);
var group = lesson.Group;
Дальше я предполагаю, что должно быть так
var jour = new Journalsliv();
jour.Learners = learners;
jour.Jjoursliv= group.Jjours;
Это все можно было упростить, сделав так
var group = db.Lessons.Find(l => l.Id == id).Include(t => t.Jjours).Group;
var jour = new Journalsliv
{
Learners = db.Learners.Where(k => k.GroupId == group.Id).ToList(),
Jjoursliv = group.Jjours.OrderBy(j => j.Date).ToList() // на всякий случай сортируем по дате
}
5. Ну и по выводу на клиенте. Я не знаю, как у Вас в задании, но выводить даты в ширину, это будет жестоко, если их надо будет вывести за достаточно длительный период. В общем дат может быть бесконечно, а кол-во учеников всегда ограничено. Я бы сделал наоборот: ученики - поля (в ширину), а даты - записи ( в длину).
Ну и главная ошибка у Вас в этом коде
@foreach (var roc in Model.Jjoursliv)
{
<tr>
<td>@roc.IIN</td>
@foreach (var roc2 in Model.Jjoursliv)
{
<td>@roc2.OCENKA</td>
}
</tr>
}
Мне совсем не понятна логика хранения оценок, раз Вы пытаетесь их таким способом достать. Судя по Вашему коду Jjoursliv это коллекция Jjour, а Jjour - это одна оценка для одного ученика. И кодом выше Вы для каждого ученика выводите оценки других учеников, т.е. для каждого вы выведе одну и туже последовательность оценок других учеников, вот они у Вас и выглядят одинакого.
Вам нужно сначала сгруппировать все оценки по имени
var learners = Model.Jjoursliv.GroupBy(j => j.IIN)
Так Вы получите коллекцию учеников, которая будет сосотоять из коллеции оценок.
И тогда это можно вывести так
@foreach (var learner in learners)
{
<tr>
<td>@learner.First().IIN</td>
@foreach (var jour in learner)
{
<td>@jour.OCENKA</td>
}
</tr>
}
Резюмируя, хочу порекомендовать: разобраться повнимательней что делает Include и как работает ToList() и в каких случаях он нужен; пересмотреть структуру бд, есть ошибки, поэтому возникли сложности с пониманием как нужно делать выборку.