2016-12-27 1 views
0

у меня есть три таблицы, как следоватьLINQ к столу внешнего ключа в другой таблице

  1. курса (идентификатор, имя, по убыванию)
  2. студентов (номер, имя, courceId)
  3. пользователей (идентификатор, имя, courseId)

see img

Мне нужно, чтобы получить студент курса, который текущий пользователь, присвоенные.

Моя проблема заключается в том, как получить таблицы записей, которые имеют внешний ключ для таблицы Я сделал следующее, однако пример кода посещает DB дважды. Есть ли способ сделать это одним посещением.

 var userId = User.Identity.GetUserId(); 

     var courseId = _context.Users 
      .Where(u => u.Id == userId) 
      .Select(u => u.CourseId) 
      .Single(); 

     var students = _context.Students 
      .Where(s => s.CourseId == courseId) 
      .ToList(); 
+0

так, код первой, модель первая, или базы данных в первую очередь? если вы правильно настроили 'User' и' Students', вы могли бы называть '_context.Users.Include (« Student »)' для ленивых нагрузок. Отношение Student (будь то два или три или только один запрос до ** entity framework **, мы ничего не можем сделать, но в любом случае это будет эффективно) –

+2

Просьба сделать хотя бы некоторые ** минимальные ** исследования, прежде чем вы ставите вопрос. Введите свой заголовок [в google] (https://www.google.com/#q=LINQ+to+table+by+foreign+key+in+another+table) и проверьте первый результат. – Sefe

+1

Возможный дубликат [Запросить таблицу с использованием свойств навигации внешнего ключа в LINQ с C#] (http://stackoverflow.com/questions/6764013/query-a-table-by-using-foreign-key-navigation-properties- in-linq-with-c-sharp) – Sefe

ответ

0

Так же, как в T-SQL, вам нужно присоединиться:

 var userId = User.Identity.GetUserId(); 

var students = _context.Users.Where(x => x.Id == userId) 
.Join(_context.Students, u => u.CourseId, s => s.CourseId, (u,s) => s) 
.ToList(); 
+0

спасибо, человек, вы спасли мой день;) – Shady

Смежные вопросы