мне нужно получить все строки из таблицы 1, даже если нет никакой информации, связанной со второй таблицей, используя Linq C# - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть этот код, который показывает все заявки с информацией об ответе (если есть), и он работает нормально. Проблема в том, что в ответе на заявку не найдено ответа на заявку, полная строка информации о заявке из заявки в службу поддержки не отображается. Поэтому я хочу показать все строки в таблице (Support_Teckets) независимо от того, имеют ли они связанные данные в (таблице Ticket_Reply)

var query = (from st in Db.Support_Teckets
             join rp in Db.Ticket_Reply.GroupBy(m => m.Support_Tecket_Id)
                                       .Select(m => m.OrderByDescending(x => x.Date).FirstOrDefault()) 
             on st.Support_Tecket_Id equals rp.Support_Tecket_Id 
             into g

             from rp in g.DefaultIfEmpty()
             join tr in Db.trainers on rp.trainer_id equals tr.trainer_id
             join pr in Db.Technical_problem on st.Technical_problem_Id equals pr.Technical_problem_Id

             select new SupportTicketsDetails
             {
                 Support_Tecket_Id = st.Support_Tecket_Id,
                 Created_Date = st.Created_Date,
                 Created_Time = st.Created_Time,
                 Order_by = Db.trainers.Where(b => b.trainer_id == st.trainer_id)
                                       .FirstOrDefault().trainer_name,
                 Technical_problem_name = pr.Technical_problem_name,
                 Created_details = st.Created_details,
                 Location = st.Location,
                 Technician = Db.trainers.Where(b => b.trainer_id == st.Technician_Id)
                                         .FirstOrDefault().trainer_name,
                 Is_Closed = rp.Reply_Text,
                 Closing_Date = st.Closing_Date ,
                 Last_replier = Db.trainers.FirstOrDefault(a => a.trainer_id == rp.trainer_id)
                                           .trainer_name.ToString(),
                 Last_reply_Date = rp.Date,
                 Last_reply_Time = rp.Time,
                 points = st.points
             }).ToList().OrderByDescending(a => a.Created_Date);

        return View(query);

Благодарю вас за сотрудничество заранее

1 Ответ

0 голосов
/ 24 апреля 2020

Это действительно нелегко проверить, но я подозреваю, что вам нужно что-то вроде этого:

    from st in Db.Support_Teckets
    join pr in Db.Technical_problem on st.Technical_problem_Id equals pr.Technical_problem_Id
    join x in 
            from rp in Db.Ticket_Reply.OrderByDescending(z => z.Date).Take(1)
            join tr in Db.trainers on rp.trainer_id equals tr.trainer_id
            select new { rp, tr }
        on st.Support_Tecket_Id equals x.rp.Support_Tecket_Id into gxs
    from gx in gxs.DefaultIfEmpty()
    select new
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...