首页新闻找找看学习计划

如何查看控制台中linq生成的SQL

0
[待解决问题]


List<Teacher> teachers = new List<Teacher> {
new Teacher("徐老师",
new List<Student>(){
new Student("宋江",80),
new Student("卢俊义",95),
new Student("朱武",45)
}
),
new Teacher("姜老师",
new List<Student>(){
new Student("林冲",90),
new Student("花荣",85),
new Student("柴进",58)
}
),
new Teacher("樊老师",
new List<Student>(){
new Student("关胜",100),
new Student("阮小七",70),
new Student("时迁",30)
}
)
};
var query1 = from t in teachers
from s in t.Students
where s.Score < 60
select new
{
t,
teacherName = t.Name,
student = t.Students.Where(p => p.Score < 60).ToList()
};
foreach (var item in query1)
{
Console.WriteLine("老师姓名:" + item.teacherName + ",学生姓名:" + item.student.FirstOrDefault().Name + ",成绩:" + item.student.FirstOrDefault().Score);
}
1.我在控制台中写了linq语句,如何才能查看该linq语句生成的SQL语句呢?
2.该条linq语句中为什么要对学生成绩做两次筛选呢?

天亦玄的主页 天亦玄 | 初学一级 | 园豆:138
提问于:2018-02-14 23:02
< >
分享
所有回答(2)
0
  1. 试试 query1.ToString()
dudu | 园豆:41257 (高人七级) | 2018-02-15 09:51

不管用啊

支持(0) 反对(0) 天亦玄 | 园豆:138 (初学一级) | 2018-02-15 09:57

@天亦玄: 刚刚没注意,你这里没有使用Entity Framework,使用EF才会生成SQL

支持(0) 反对(0) dudu | 园豆:41257 (高人七级) | 2018-02-15 10:06
1

 LINQ  != SQL

LINQ= Language-Integrated Query (LINQ)

https://docs.microsoft.com/en-us/dotnet/csharp/linq/

你现在用的这基本算是属于 Linq to Object, 不会翻译成SQL语句的。

 

说回你的问题,仔细看了一下,其实LINQ的优点是容易理解(对学习过SQL的人容易理解)

很显然你没学过SQL,哈哈。

我们先看第一段

Where Score>60,这个你应该理解,我就不说了。

关键是第二段

select new {
t,
teacherName = t.Name,
student = t.Students.Where(p => p.Score < 60).ToList()
};

你想想,你Select 的是t= teacher,那么第一段的where 几乎是无用功(对你目前的数据来说是无用的)

等于所有的Teacher还是选择上了。

这时候你又对t选择 students,那当然还是所有的Students了,所以,只好再来一次where score>60了。

 

就事论事,解释就是上面这样了。

如果是要说到需求或者代码,那这段代码当然写得很土很天真了,真的代码肯定不会这样写的。

爱编程的大叔 | 园豆:29564 (高人七级) | 2018-02-15 10:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册