2016-04-13 14 views
2

以下のコードで異なるレコードを返すにはどうすればよいですか?コースとcoursesstructuresとの間の関係は、問題は二from句の使用であるように私には思えるLINQを使用して別のレコードを返す方法

public IQueryable<object> GetCoursesDetails() 
{ 
    var query = (from c in db.Courses 
       from cs in db.CoursesStructures.Where(cs => cs.CourseID == c.CourseID).DefaultIfEmpty() 
       select new 
       { 
        CourseID = c.CourseID, 
        CourseName = c.CourseName, 
        CoursesStructures = db.CoursesStructures.Select(x => new 
        { 
         CourseStructureID = x.CourseStructureID, 
         CourseID = x.CourseID, 
         StructureName = x.StructureName 
        }).Where(k => k.CourseID == c.CourseID) 
       }); 

    return query; 
} 

答えて

2

多くの1つである - あなたは、すべてのcsを使用して、なぜそれを気にしていませんか?マッチするコース構造ごとに1つの結果を選択しているので、重複を導入するだけです。

は、私が実際にjoin ... into句を使用し、その後に結果を使用することになり、あなたのselect

var query = from c in db.Courses 
      join cs in db.CoursesStrutures 
       on c.CourseID equals cs.CourseID 
       into structures 
      select new 
      { 
       c.CourseID, 
       c.CourseName, 
       CoursesStructures = structures.Select(x => new 
       { 
        x.CourseStructureID, 
        x.StructureName 
       } 
      }; 

(明らかに同じになるだろうと私は、ネストされた匿名型からCourseIDを削除しました外側の一つはとにかく...私はまた、コードを簡素化するために投影初期化子を使用しました - 。あなたは匿名型の初期化子でだけx.FooFoo = x.Fooを短縮することができる場所、それはだ)

+0

おかげジョンスキート。それはすぐに働いた。 –

関連する問題