使用LINQ组织数据库结果

时间:2016-09-14 05:14:15

标签: .net sql-server 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   |
+-------------------+---------------+-----------+

在单个查询中是否可以?怎么样?

1 个答案:

答案 0 :(得分: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
                        })
                    };