Я запросил, что я использую GroupJoin для списка элементов (родительский элемент) и GroupJoin для списка элементов (первый дочерний элемент) для второго списка (второй дочерний элемент), который имеет fk для первого дочернего элемента.При получении списка для каждого элемента (родительского элемента) я получаю по одному m элементу (поэтому необходимо получить один результат с помощью списка элементов, каждый из которых («отец») встречается несколько раз с одним («первым дочерним элементом»).") результат.
Надеюсь, код объяснит лучше.
Модель объекта:
public class QuettaReq
{
public QuettaReq()
{
}
[Key] public int Id { get; set; }
public ApplicationUser User { get; set; }
public Category Category { get; set; }
public int CatId { get; set; }
//Parameters
public virtual List<QuettaOffer> QuettaOffer { get; set; }
public virtual List<QuoteQuestion> QuoteQuestions { get; set; }
}
public class QuoteQuestion
{
[Key] public int QuoteQuestionId { get; set; }
public int QuoteId { get; set; }
public QuettaReq QuettaReq { get; set; }
public string Question { get; set; }
public IList<Answers> Answers { get; set; }
}
Просмотр модели:
public class ReqestWithQA
{
[Key] public int Id { get; set; }
//public ApplicationUser User { get; set; }
public string SiteUserId { get; set; }
//properties
public virtual IList<QAViewModel> QAViewModel { get; set; }
public int QuettaReqId { get; set; }
}
public class QAViewModel
{
public int QuoteQuestionId { get; set; }
public int QuoteId { get; set; }
public string Question { get; set; }
public IList<Answers> Answers { get; set; }
}
Запрос:
IQueryable<ReqestWithQA> viewModel = _context.Quetta
.Include(q => q.Category)
.Where(d => d.OfferDate > DateTime.Now && d.CatId == suplayerCat)
.Where(rq => !postOn.Contains(rq.Id))
.GroupJoin(
_context.quoteQuestions.Include(t => t.Answers),
quetta => quetta.Id,
qestion => qestion.QuoteId,
(quetta, joinQestionQuetta) => new ReqestWithQA
{
ReqText = quetta.ReqText,
Qentity = quetta.Qentity,
CatId = quetta.CatId,
CatName = quetta.Category.CatName,
District = quetta.District,
ApplicationDate = quetta.ApplicationDate,
DeliveryDate = quetta.DeliveryDate,
OfferDate = quetta.OfferDate,
TecnicalDetails = quetta.TecnicalDetails,
Bedget = quetta.Bedget,
Id = quetta.Id,
QAViewModel = new[] {
joinQestionQuetta
.Select(q => new QAViewModel
{
Question = q.Question, //there are 6 question
Answers = q.Answers,
QuoteId = q.QuoteId
})
.FirstOrDefault()
}
});
return View(viewModel.Distinct().ToList()); //viewModel results are 6 Should be 1 with 6 Q
Я думаю, что проблема в массиве, но я понятия не имею, что вместо этого использовать:
QAViewModel = new[] {
joinQestionQuetta
.Select(q => new QAViewModel