2016-09-14 91 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> 

最好的我已經試過是

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 

導致

+-------------------+---------------+-----------+ 
| 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 | 
+-------------------+---------------+-----------+ 

是否有可能在一個單一的查詢?怎麼樣?

+0

但它是一個單一的查詢... –

+0

不要你已經有你的答案與自己的碼?問題是什麼? – 2016-09-14 05:36:27

+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 
         }) 
        };