2016-09-14 3 views
1

映画/映画管理システムに問題があります。私はLINQを使用してデータベースの結果を整理する

フィルム

+----+------------------+---------------------------+ 
| Id | Name    | Description    | 
+----+------------------+---------------------------+ 
| 1 | Kabaddi Kabaddi |Kabaddi Kabaddi is a... | 
| 2 | Kabaddi   |Kabaddi is a...   | 
| 3 | Jholay   |A man hopes to achieve... | 
| 4 | Nai Nabhannu La |       | 
+----+------------------+---------------------------+ 

役割

+----+----------+ 
| Id | Name  | 
+----+----------+ 
| 1 | Actor | 
| 2 | Actress | 
| 3 | Director | 
+----+----------+ 

人々

+----+--------------+---------------+-----------+ 
| Id | FirstName | MiddleName | LastName | 
+----+--------------+---------------+-----------+ 
| 1 | Dayahang  |    | Rai  | 
| 2 | Priyanka  |    | Karki  | 
| 3 | Nischal  |    | Basnet | 
+----+--------------+---------------+-----------+ 

テーブル、テーブルを持っていますキャスト

+-----------+-----------+-----------+ 
| FilmId | PersonId | RoleId | 
+-----------+-----------+-----------+ 
| 1   | 1   | 1   | 
| 2   | 1   | 1   | 
| 3   | 1   | 1   | 
| 2   | 3   | 1   | 
| 1   | 3   | 1   | 
| 2   | 3   | 3   | 
| 1   | 3   | 3   | 
| 4   | 2   | 2   | 
+-----------+-----------+-----------+ 

私の目標は、単一のクエリでそれぞれの役割とそれぞれのキャストで映画のリストを取得することです。

Kabaddi Kabaddi <FilmName> 
    Dayahang <CastFirstName> 
     Actor <RoleName> 
    Nischal <CastFirstName> 
     Actor <RoleName> 
     Director <RoleName> 
Jholay <FilmName> 
    Dayahang <CastFirstName> 
     Actor <RoleName> 
    Priyanka <CastFirstName> 
     Actress <RoleName> 

私が試してみましたベスト

+-------------------+---------------+-----------+ 
| FilmName   | CastFirstName | RoleName | 
+-------------------+---------------+-----------+ 
| Kabaddi Kabaddi | Dayahang  | Actor  | 
| Kabaddi   | Dayahang  | Actor  | 
| Jholay   | Dayahang  | Actor  | 
| Kabaddi   | Nischal  | Actor  | 
| Kabaddi Kabaddi | Nischal  | Actor  | 
| Kabaddi   | Nischal  | Director | 
| Kabaddi Kabaddi | Nischal  | Director | 
| Nai Nabhannu La | Nischal  | Actress | 
+-------------------+---------------+-----------+ 

を結果

var result = from cast in entity.Casts 
      join film in entity.Films on cast.FilmId equals film.Id 
      join person in entity.People on cast.PersonId equals person.Id 
      join role in entity.Roles on cast.RoleId equals role.Id 

それは単一のクエリで可能ですか?どうやって?

+0

しかし、それは、単一のクエリです... –

+0

は、あなたはすでにあなた自身とあなたの答えを持っていませんコード?何が問題ですか? –

+0

しかしFilmNameは繰り返しています。私はポストで "私の目標は映画のリストを取得することです..."の後に記載された順序でそれが必要です。 – srekcahrai

答えて

0

私は(構文とタイプミスを言い訳してください)このような何かを始めるために役立つはず、願っています:

from cast in entity.Casts 
      join film in entity.Films on cast.FilmId equals film.Id 
      join person in entity.People on cast.PersonId equals person.Id 
      join role in entity.Roles on cast.RoleId equals role.Id 
group new { cast, film, person, role} by film into grp 
        select new 
        { 
         Film = grp.Key.Name, 
         Persons= grp.Select(r => new People() 
         { 
          Id = r.People.Id 
         }), 
         Roles = grp.Select(r => new Role() 
         { 
          Id = r.role.Id 
         }) 
        }; 
関連する問題