【问题标题】:Convert sql query with multiple inner joins to LINQ将具有多个内部联接的 sql 查询转换为 LINQ
【发布时间】:2012-10-24 16:17:37
【问题描述】:

我有这个查询,我从 6 个表中检索到,这些表获取日期、评分、评分者、班级名称、分数、主题。

SELECT r.date, u1.username as rated, u2.username as rater, c.name as classname, s.ratings, sbj.name
FROM Ratings r
 INNER JOIN Users u1 ON u1.userid = r.rated 
 INNER JOIN Users u2 ON u2.userid = r.rater 
 INNER JOIN ClassMembers cm ON u1.userid  = cm.userid
 INNER JOIN Class c ON cm.teamid = c.teamid
 INNER JOIN Scores s ON s.ratingsid = r.ratingsid 
 INNER JOIN Subjects sbj ON sbj.subjectid = s.subjectid

这会导致

date         | rated | rater | teamname | score |  subject
10/12/2012    john     mike     teamA      9        Math
10/09/2012    john     mike     teamA      9        Science
10/09/2012    john     abra     teamA      5        Math
10/09/2012    john     abra     teamA      5        Science

我必须将此查询转换为 LINQ 表达式。 我很难将我的 sql 查询转换为 LINQ。任何帮助将不胜感激。

【问题讨论】:

    标签: sql-server linq tsql


    【解决方案1】:

    您可以通过加入来做到这一点:

    var results = from r in Ratings
                  join u1 in Users on u1.userid = r.rated
                  join u2 in Users on u2.userid = r.rater
                  join cm in ClassMembers on cm.userid = r.rated
                  join c in Class on cm.teamid = c.teamid
                  join s in Scores on s.ratingsid = r.ratingsid
                  join sbj in Subjects on sbj.subjectid = s.subjectid
                  select new 
                         {
                            Date = r.date, 
                            Rated = u1.username,
                            Rater = u2.username,
                            ClassName = c.name,
                            Ratings = s.ratings,
                            Subject = sbj.name
                          };
    

    【讨论】:

    • 谢谢!在我必须交换 on equals 之前,我尝试过类似的方法。但这很完美!你就是男人!
    • 你知道如何按 ClassName c.name 对它们进行分组吗?
    【解决方案2】:

    select distinct subcat as CatID,CatName,CatID as subcat,Subcategory from (选择 a.CatName,b.CatName 作为 Subcategory,a.CatID 作为 subcat,b.CatID 从 Iris_CategoryMaster a 内部加入 Iris_CategoryMaster b on a.CatID=b.ParentID where b.Status=1) as x

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多