请问如何实现以下子查询sql,不用mapper的方式。 返回

求助
96
该叫什么 993 发布于2周前
悬赏:5 飞吻
SELECT * 
FROM Student st left join
(
select top 1 *
from Score sc left join Class cl on sc.ClassId = cl.Id
 order by Score DESC 
) t on st.Id = t.StudentId

类似这样的语句,意思是查询所有学生,并带有学生成绩最低的成绩及科目信息。

var q1 = db.Queryable<Student>().Where(st => st.UserId == 1);
var q2 = db.Queryable<Score , Class >((sc, cl) => new object[] { JoinType.Left, sc.ClassId == cl.Id})
                //.OrderBy((sc, cl) => sc.Score , OrderByType.Desc)
                .Select((sc, cl) => new  ScoreView{ Score = sc, Class = cl});
var iq = db.Queryable(q1, q2, JoinType.Left, (j1, j2) => j1.Id == j2.Score.StudentId);

如果我这么写,那会在最后一行报错

System.InvalidOperationException:“从作用域“”引用了“Entity.View.ScoreView”类型的变量“j2”,但该变量未定义”

另外,如果子查询代码包含Orderby也会报错,内容大致就是不能包含Orderby还有其他什么的。


我用mapper实现了,不过效率感觉没有那么高。这种方法也是引用文档中的方法。但是就报错。请问有什么办法吗

热忱回答0

版块

学习文档

最新会员

发布达人

回贴达人