tags:

views:

39

answers:

2

I have the following view:-

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 

When I run the following query directly against the db I get 0 in the count column where there is no result

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

However when I use LINQ query I always get 1 in the Count Column

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

What do I need to change in the View / Linq query.

+1  A: 

The point is: you're grouping your data in the LINQ query - and you'll always get at least one group.

That group's Count may be 0 - but the count of groups will be 1.

marc_s
+1  A: 

You're not doing the same thing in the LINQ query as in the SQL. COUNT(result_id) does not count distinct values of result_id - it counts non-null values.

Try this instead:

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