Как спроектировать вложенный запрос для извлечения данных из таблиц MS SQL с использованием Entity Framework? - PullRequest
2 голосов
/ 28 сентября 2019

У меня есть три таблицы, которые вы можете увидеть на следующей диаграмме:

enter image description here

Моя проблема в том, что я хочу вернуть все проблемы, их ответы иколичество увиденных статусов, т.е. тех ответов, которые еще не видел.Я использую Entity Framework.Я использовал следующий запрос:

querySelection = (from problems in db.Problems
              join response in db.Response on problems.Id equals response.QueryId
              join order in db.Msg_Orders on response.Id equals order.Response_Id
              join seen_status in db.Seen_Status on order.Order_Id equals seen_status.OrderId
              select new QuerySelect{
                Problem_State = problems.Problem_State,
                Response = response.Response,
                ResponseCount = /*What code should I write here*/
              }).ToList();

У меня 2 проблемы с моим запросом:

  1. Ожидание : он должен возвращать только уникальные проблемыи невидимое количество ответов

    Какой результат получается : поскольку Msg_Orders имеют несколько идентификаторов проблем и выше, запрос возвращает один и тот же результат несколько раз

  2. Не понимает, как добавить счетчикНевидимый статус внутри запроса.

1 Ответ

2 голосов
/ 29 сентября 2019

Я использовал решение Джеффа Меркадо и его комментарий, чтобы выяснить, что именно я могу сделать и как я могу изменить запрос в форме синтаксиса Entity Framework.Для достижения моей цели мне нужно было использовать предложение GROUP BY с INNER JOIN в синтаксисе Entity Framework.

Я написал следующее решение, которое решило вышеуказанную проблему:

querySelection = (from problems in db.Problems
              join response in db.Response on problems.id equals response.Query_Id
              join order in db.Msg_Orders on query.id equals order.query_id
              join seen_status in db.Seen_Status on order.Order_id equals seen_status.Order_id
              group new { problems, response, order ,seen_status }
                by new
                {
                    problems.Id,
                    problems.Problem_State,
                    problems.Created_Date,
                    response.Response,
                    seen_status.User_Seen_Status
                } into grp
              orderby grp.Key.Id descending
              select new QuerySelection
              {
                  Id = grp.Key.Id,
                  Problem_State = grp.Key.Problem_State,
                  Created_Date = grp.Key.Created_Date,
                  Response = grp.Key.Response,
                  TotalResp = grp.Count(x => x.seen_status.user_seen == 0) // Counting total number of responses
              }
              ).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...