如何设计嵌套查询以使用实体框架从 MS SQL 表中获取数据?

我有三个表,您可以在下图中看到:

https://img1.sycdn.imooc.com/65ab7e4500019eb606280307.jpg

我的问题是,我想返回所有问题、其响应以及已看到状态的计数,即尚未看到的响应。我正在使用实体框架。我使用了以下查询:

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();

我的上述查询有两个问题:

  1. 期望:它应该只返回独特的问题和看不见的响应计数

    得到什么结果:由于 Msg_Orders 有多个问题 ID,并且上述查询多次返回相同的结果

  2. 不明白如何在上述查询中添加未见状态的计数。


慕哥9229398
浏览 88回答 1
1回答

慕运维8079593

为了实现目标,需要在实体框架语法中使用GROUP BY子句。INNER JOIN我写了以下解决方案来解决上述问题: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();
打开App,查看更多内容
随时随地看视频慕课网APP