如果有人可以帮助我们准备这个linq查询。
以下是表格数据:
category question answer user
a1 q1 3 u1
a1 q1 5 u2
a1 q2 3 u2
a2 q3 3 u3
a2 q3 2 u4
a3 q4 9 u3
a3 q5 8 u7
a3 q5 2 u9
我需要如下结果: 按类别,问题,结果分组(具有以下三个条件的组)。
因此,对于每个类别,每个问题,需要将结果分为三种形式(按答案分组(&lt; = 3)和一组,答案= 5和第三组答案= 8或7或9),< / p>
category name Question TotalCount Ans(<=3) Ans(5) Ans(7 or 8 or 9)
a1 q1 2 1 1 0
a1 q2 1 1 0 0
a2 q3 1 1 0 0
.....
我尝试在SQL中使用以下查询(这不是完美的查询,因为我需要结果组的列而不是记录)。
SELECT
Category, Question,
Count(Ans),
CASE
WHEN Ans = 9 OR Ans = 8 OR ans=7 THEN '9 or 8 or 7'
WHEN Ans = 5 THEN '5'
WHEN Ans <= 3 THEN '<=3'
END as 'ResultGroup'
FROM
SurveyQuestions
GROUP BY
Category, Question, Ans
ORDER BY
Question
请指导我如何获得如上所示的结果。我需要LINQ
查询才能获得此结果。
感谢
答案 0 :(得分:0)
您不需要通过回答对其进行分组。而是过滤并依靠下面的答案:
from t in db.Table
group t by new {t.Category, t.Question} into g
order by g.Category
select new
{
CategoryName = t.FirstOrDefault().Category, //might be required to handle null here
Question = t.FirstOrDefault().Question, //might be required to handle null here
TotalCount = t.Count(),
AnsLessEqual3 = t.Where(d => d.Answer<=3).Count(),
Ans5 = t.Where(d => d.Answer = 5).Count(),
Ans789 = t.Where(d => d.Answer = 7 || d.Answer = 8 || d.Answer = 9).Count()
}
虽然上面的查询未经过测试,但我相信它可以让您快速开始前进。