LINQ计数查询返回1而不是0

时间:2010-05-07 20:52:17

标签: linq

我有以下观点: -

CREATE VIEW tbl_adjudicator_result_view
AS
SELECT a.adjudicator_id, sar.section_adjudicator_role_id, s.section_id, sdr.section_dance_role_id, d.dance_id, c.contact_id,
 ro.round_id, r.result_id, c.title, c.first_name, c.last_name, d.name, r.value, ro.type
FROM tbl_adjudicator a
INNER JOIN tbl_section_adjudicator_role sar on sar.section_adjudicator_role2adjudicator = a.adjudicator_id
INNER JOIN tbl_section s on sar.section_adjudicator_role2section = s.section_id
INNER JOIN tbl_section_dance_role sdr on sdr.section_dance_role2section = s.section_id
INNER JOIN tbl_dance d on sdr.section_dance_role2dance = d.dance_id
INNER JOIN tbl_contact c on a.adjudicator2contact = c.contact_id
INNER JOIN tbl_round ro on ro.round2section = s.section_id
LEFT OUTER JOIN tbl_result r on r.result2adjudicator = a.adjudicator_id AND r.result2dance = d.dance_id 

当我直接针对db运行以下查询时,我在count列中得到0,其中没有结果

select adjudicator_id, first_name, COUNT(result_id)
from tbl_adjudicator_result_view arv
where arv.round_id = 16
group by adjudicator_id, first_name

但是当我使用LINQ查询时,我总是在Count Column

中得到1
var query = from arv in db.AdjudicatorResultViews
                    where arv.round_id == id
                    group arv by new { arv.adjudicator_id, arv.first_name} into grp 
                    select new AdjudicatorResultViewGroupedByDance
                    {
                        AdjudicatorId = grp.Key.adjudicator_id,
                        FirstName = grp.Key.first_name,
                        Count = grp.Select(p => p.result_id).Distinct().Count()
                    };

我需要在View / Linq查询中更改什么。

2 个答案:

答案 0 :(得分:3)

你在LINQ查询中没有像在SQL中那样做。 COUNT(result_id)不计算result_id的不同值 - 它会计算非空值。

请改为尝试:

Count = grp.Select(p => p.result_id).Where(x => x != null).Count()

答案 1 :(得分:2)

重点是:您在LINQ查询中对数据进行分组 - 并且您将始终至少获得一个组。

该组的Count可能为0 - 但组的数量为1。

相关问题