2011-07-08 5 views
1

で登録しよう!LEFTは、私はLINQに次のSQLクエリを変換するヘルプが必要なカウント

+1

参照[LINQの101でオペレータに参加](http://msdn.microsoft.com/en-us/vcsharp/ee908647#leftouterjoin) –

+0

私はそれを考え出しました。以下の式が働いた! var results = Teachers .Select(t => new {TeacherID = t.TeacherID、FirstName = t.FirstName、LastName = t.LastName、Title = t.Title、Grade = t.Grade、Count = t.Students.Count、 }); results.ToList()。Dump(); – rk1962

答えて

0

私はいくつかの研究を行なったし、解決策を見つけました。それを修正し、次の式:

var results = Teachers 
       .Where(t => t.IsActive == true) 
       .Select(t => 
       { 
        TeacherID = t.TeacherID, 
        FirstName = t.FirstName, 
        LastName = t.LastName, 
        Title = t.Title, 
        Grade = t.Grade, 
        Count = t.Students.Where(s => s.IsActive == true).Count()     
       }); 
results.ToList().Dump(); 
1

左を行うためには、あなたがそうのようなDefaultIfEmpty()メソッドを使用する必要があります参加:

from r in results.DefaultIfEmpty() 
+0

これを以前に試してみましたが、LINQPadに次のエラーがスローされていました。InvalidOperationException:NULL値を、nullable型のSystem.Int32型のメンバに割り当てることができません。 – rk1962

0
var teachers = 
    (from t in Teachers 
    join s in Students on t.TeacherID equals s.TeacherID 
    into results 
    where t.IsActive == true 
    from r in results.DefaultIfEmpty()          
    group r by new { r.TeacherID, r.Teacher.FirstName, r.Teacher.LastName, r.Teacher.Title, r.Teacher.Grade} into g 
    select new { TeacherID = g.Key.TeacherID,FirstName = g.Key.FirstName, LastName = g.Key.LastName, Title=g.Key.Title, Grade = g.Key.Grade}     
    ); 
+0

これを以前に試してみましたが、LINQPadに次のエラーがスローされていました。InvalidOperationException:Null値を、nullable値型であるSystem.Int32型のメンバに割り当てることができません – rk1962

関連する問題