Tyring для преобразования SQL в LINQ to Entities - PullRequest
1 голос
/ 23 марта 2011

У меня несколько простой запрос в SQL, который я хотел бы преобразовать в Linq to Entities.

По сути, мне нужны все доступные курсы в базе данных, но я хочу получить последний результат теста для каждого курса для конкретного пользователя, если он прошел курс. Возможно, они проходили курс несколько раз, но я бы хотел получить только последний результат теста для каждого теста. Возможно ли это с помощью одного оператора Linq?

Вот SQL:

select c.courseid, c.Name, ca.result
from Course c
    left join CourseAttempt ca
    on c.CourseId = ca.CourseId
        and ca.CourseAttemptId in
        (
            select max(courseattemptid)
            from courseattempt
            where userid=1234
            group by courseid
        )

Вот что у меня есть:

var stuff = (from c in context.Course
             join ca in context.CourseAttempt.Where(a => a.userid == _userid) 
             on c.CourseId equals ca.Course.CourseId into jca
             select new
             {
                 courseId = c.CourseId,
                 name = c.Name,
                 result = jca.Select(a => a.result)
             }).ToList();

Проблема в том, что результатом является массив всех результатов. Как мне получить только последний результат?

1 Ответ

0 голосов
/ 24 марта 2011

Это решение работает:

var stuff = (from c in context.Course
             join ca in context.CourseAttempt.Where(a => a.user.userid == _userid) 
             on c.CourseId equals ca.Course.CourseId into jca
             select new
             {
                 courseId = c.CourseId,
                 name = c.Name,
                 result = jca.OrderByDescending(a => a.CourseAttemptId).Take(1).Select(a => a.result).Cast<int>().DefaultIfEmpty(-1).FirstOrDefault()                 
             }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...