2012年9月16日日曜日

[C#] LINQ To Entities でコレクションのプロパティに値を突っ込む

なにを言いたいのかいまいちよくわからないタイトル。


コレクションをプロパティに持つクラスがあるとして

    public class SchoolViewModel    {
        public int ClassID { get; set; }
        public int Grade { get; set; }
        public int Class { get; set; }
        public IEnumerable<SchoolerViewModel> SchoolerList { get; set; }
    } 


    // 上のコレクションの要素となるクラス
    public class SchoolerViewModel
    {
        public int ClassID { get; set; }
        public string Name { get; set; }
        public int Number { get; set; }
    }


このにコレクションにLINQでがつんと値を入れる


from school in db.School
   join sc in db.Schooler on school.ClassID equals sc.ClassID into schooler
   select new SchoolViewModel()
   {
       ClassID = school.ClassID
       ,
       Grade = school.Grade
       ,
       Class = school.Class
       ,
       SchoolerList = schooler.Select(
           s => new SchoolerViewModel() { 

               ClassID = s.ClassID, Name = s.Name, Number = s.Number 
           } )
   };
}


LINQの into 句とか select の中で もう一度 select してるあたりがミソ(だと思ってる)。
SQLは一発しか発行されていない。
取得されるデータをLINQさんが勝手にグループ化してコレクションのプロパティに入れてくれるという。LINQさんってすげぇ…。

0 件のコメント:

コメントを投稿