Как выбрать данные для пользовательского объекта из левого соединения LINQ to SQL, как я могу указать значение по умолчанию для атрибута, который иногда может быть нулевым? - PullRequest
0 голосов
/ 11 марта 2011

Более конкретно, см. Код ниже, я хочу, чтобы он ВСЕГДА возвращал QuestionName и NodeID (они всегда будут существовать вместе), но когда нет QuestionTracking, я хочу, чтобы он сказал «Не предпринято». Однако до сих пор я получаю результаты только из этого запроса, если есть отслеживание вопроса. Как я могу получить "Not Attempted" в этой строке, если и когда нет данных о левом соединении?

public IQueryable<QuestionSummary> GetFullCourseQuestions(int CourseID, int RevisionID, int UserID)
{
    return (from n in db.CourseNodes
            join a in db.Assets on n.AssetID equals a.AssetID
            join q in db.Questions on a.AssetID equals q.AssetID
            join qt in db.QuestionTrackings on q.QuestionID equals qt.QuestionID into qu
            where n.CourseID == CourseID && n.CourseRevisionID == RevisionID
            from qtu in qu.DefaultIfEmpty()
            where qtu.UserID == UserID
            select new QuestionSummary
            {
                QuestionText = q.QuestionName,
                NodeID = n.CourseNodeID,
                AnswerStatus = (qtu.IsCorrect == null) ? "Not Attempted" : (qtu.IsCorrect) ? "Correct" : "Incorrect"
            });
}

Ответы [ 2 ]

1 голос
/ 12 марта 2011

Мне кажется, проблема может быть в вашем where предложении:

where qtu.UserID == UserID

Поскольку с момента запуска DefaultIfEmpty ваш объект qtu не будет содержать действительный UserId.

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

Я думаю, что qtu.defaultifempty вернет значение null для значения по умолчанию, поэтому тот факт, что вы не сообщаете об исключительной ситуации при проверке qtu.userid, предполагает, что вас могут оставить присоединением не к той таблице.Это означает, что в данных, которые вы тестируете, все вопросы отслеживаются.Я не знаю структуру вашей базы данных, но, возможно, вы могли бы попробовать внешние соединения для других объединений?(извините за отсутствие форматирования, на мобильном сайте нет кнопок форматирования)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...