2014-01-14 2 views
0

Мой SQL работает;Преобразование инструкции SQL в Linq - инструменты не работают

select Question, QuestionOption.QuestionOption, Response.Answer from Questions 
left join QuestionOption on (QuestionOption.QuestionId = QuestionS.Id) 
left join Response on (Questions.Id = Response.QuestionId) 
Where PageNumber = 1 AND (Response.UserId = '6c61c415-1e09-4c16-82bf-fbc1b30e3c5a') 

PageNumber и Response.UserId переменные, которые я могу захватить с моей модели, но ни одно из заявлений Linq я не пытался работать, но я не уверен, если это моя Linq или мой ViewModel;

public class GetQuestionViewModel 
{ 
    public virtual List<Question> Questions { get; set; } 

    public int Id { get; set; } 
    public int PageNumber { get; set; } 
    public string Question1 { get; set; } 
    public int QuestionTypeId { get; set; } 
    public Nullable<int> LinkedTo { get; set; } 
    public Nullable<int> Options { get; set; } 
    public Nullable<int> QuestionRanking { get; set; } 
    public virtual ICollection<QuestionOption> QuestionOptions { get; set; } 
    public virtual QuestionType QuestionType { get; set; } 
    public virtual ICollection<Response> Responses { get; set; } 
    public virtual ICollection<AspNetUser> AspNetUsers { get; set; } 
} 

Я просто добавил Публичный список Вопросы виртуальных линии моей ViewModel, но он все равно не будет компилироваться.

Я не уверен, что мне нужно AspNetUsers в моей модели, как я схватил его на мой взгляд, в скрытом поле с помощью @ User.Identity.GetUserId(), но я добавил это как мой взгляд перерывы, когда я укажите его в GetQuestionViewModel. Может ли кто-нибудь опубликовать пример того, как это должно быть сделано правильно, или порекомендовать инструмент, который сделает это для меня? Linqer не работает, и я жду поддержки, чтобы вернуться с решением.

Я знаю, что это далеко, так как оно даже не дает правильных вопросов в поле PageNumber, и я удалил все ссылки на Response, поскольку я даже не могу заставить это работать;

// var question = from q in db.Questions 
    //     where q.PageNumber == pageId 
    //     orderby q.Ranking 
    //     select new Template.Models.GetQuestionViewModel() 
    //     { questionId = q.QuestionId, 
    //     questionType = q.QuestionType, 
    //     question1 = q.Question1 }; 
    // return View(question.AsEnumerable()); 
+1

Покажите Linq вы пробовали. – Magnus

ответ

0

DefaultIfEmpty превратит его от внутреннего соединения с левой присоединиться

var query = from q in db.Questions 
      from qo in q.QuestionOptions.DefaultIfEmpty() 
      from r in q.Responses.DefaultIfEmpty() 
      where q.PageNumber == 1 && r.UserId == '6c61c415-1e09-4c16-82bf-fbc1b30e3c5a' 
      select new Template.Models.GetQuestionViewModel() 
      { 
       questionId = q.QuestionId, 
       questionType = q.QuestionType, 
       question1 = q.Question1 
      }; 
+0

Я попробовал ваш запрос, но он не будет компилироваться в «Вопросе», говоря, что шаблон «Выбрать многие» не найден. Итак, я добавил строку в мою модель ViewModel, но является ли мой синтаксис неправильным? Должен ли он быть списком ICollection, а не списком? – Alex

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