【问题标题】:VB.NET SQL Server query to LINQVB.NET SQL Server 查询到 LINQ
【发布时间】:2017-09-16 12:36:48
【问题描述】:

我正在尝试将以下工作查询转换为 LINQ VB.NET,但是,我没有得到结果。

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

结果不正确。你能帮帮我吗?

【问题讨论】:

    标签: c# sql-server vb.net visual-studio linq


    【解决方案1】:

    很明显的一点是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
    

    【讨论】:

    • 完美,谢谢!我错误地在 LINQ 中添加了 c.Grade
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多