2017-04-20 128 views
2

我想将下面的工作查询转换为LINQ VB.NET,但是,我没有得到结果。VB.NET SQL Server查询到LINQ

select 
    s.id, s.LastName, COUNT(c.Id) 
from 
    Students s, Courses c 
where 
    s.Id = c.Student_Id 
group by 
    s.Id, s.LastName 

我迄今达成:

Dim query = (From s In db.Students 
       Join c In db.Courses On s.Id Equals c.Student_Id 
       Group s, c By s.Id, s.LastName, c.Grade Into Group 
       Select New With {.Id = Id, .Name = LastName, .Counter = Group.Count 
        }).ToList 

的结果是不正确的。你能帮我么?

回答

0

有一点很明显,就是group by条款。在SQL您有:

group by s.Id, s.LastName 

但LINQ的你也组由c.Grade

Group s, c By s.Id, s.LastName, c.Grade Into Group 

另一个小问题是COUNT(c.Id)应该只计算非空值,但你可能没有那里有任何空值,所以它应该是相同的。

在Linq的许多情况下,如果您有外键并且模型设置正确,则不应使用Join。这也可能工作(我不知道这是正确的语法):

db.Students.Select(Function(s) New With {.Id = s.Id, .Name = s.LastName, .Counter = s.Courses.Count()}).ToList 
+0

完美,谢谢!我错误地在LINQ中添加了c.Grade – expert