我在电影/电影管理系统中遇到问题。我有桌子,
表电影
+----+------------------+---------------------------+
| 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)
我希望,这样的事情应该有助于开始(请原谅语法和拼写错误):
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
})
};