如何使用内部联接,左外部联接,分组依据和两个计数的查询转换为linq?
SELECT
c.EndowmentID,
COUNT(DISTINCT f.CriterionID) AS RequiredCriteria,
COUNT(r.ChoiceID) AS Response
FROM
Criteria c
INNER JOIN
Filters f
ON
c.ID = f.CriterionID
LEFT OUTER JOIN
Responses r
ON
f.ChoiceID = r.ChoiceID
WHERE
f.IsRequirement = 1
GROUP BY
c.EndowmentID;
这是我到目前为止所做的:
var result =
from c in context.Criteria
join f in context.Filters on c.ID equals f.CriterionID
join r in context.Responses on f.ChoiceID equals r.ChoiceID into resfil
from rf in resfil.DefaultIfEmpty()
group rf by c.EndowmentID into grouped
select new
{
EndowmentID = grouped.Key,
Requirements = grouped.Count(t=>t.CriterionID),
Response = grouped.Count(t=>t.ChoiceID)
};
1 回答
你需要
group
使用匿名类 . 这将允许您访问select
语句中的所有表SQL:
COUNT(DISTINCT f.CriterionID) AS RequiredCriteria,
这可以通过首先选择
f.CriterionID
列,Distinct()
,Count()
来编写SQL:
COUNT(r.ChoiceID)