2017-04-20 30 views
2

以下の作業クエリをLINQ VB.NETに変換しようとしていますが、結果が得られません。LINQへのVB.NET SQL Serverクエリ

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節です。また

group by s.Id, s.LastName 

が、LINQの上のあなたがc.Gradeによってグループ:

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

別のマイナーな問題は、唯一の非NULL値をカウントする必要がありますが、あなたはおそらくありませんCOUNT(c.Id)であるあなたが持っているSQLオンそこにはnull値があるので、同じでなければなりません。

多くの場合、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

関連する問題