需要linq查询才能获得特定的结果集

时间:2015-04-15 04:15:56

标签: c# linq

如果有人可以帮助我们准备这个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查询才能获得此结果。

感谢

1 个答案:

答案 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()
}

虽然上面的查询未经过测试,但我相信它可以让您快速开始前进。