首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左外连接和多次计数SQL到LINQ

左外连接和多次计数SQL到LINQ
EN

Stack Overflow用户
提问于 2014-02-18 19:19:56
回答 1查看 506关注 0票数 1

如何将使用内部联接、左外部连接、组by和两个计数的查询转换为linq?

代码语言:javascript
复制
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;

这就是我到目前为止所做的:

代码语言:javascript
复制
            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)
                };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-18 19:25:36

您需要使用匿名类进行group。这将允许您访问select语句中的所有表。

代码语言:javascript
复制
group new { c, f, rf } by c.EndowmentID into grouped

SQL:COUNT(DISTINCT f.CriterionID) AS RequiredCriteria,

这可以通过首先选择f.CriterionID列、Distinct()Count()来编写。

代码语言:javascript
复制
RequiredCriteria = grouped.Select(x => x.f.CriterionID).Distinct().Count()

SQL:COUNT(r.ChoiceID)

代码语言:javascript
复制
Response = grouped.Select(x => x.rf.ChoiceID).Count()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21863331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档