【问题标题】:Using LINQ to organize database result使用 LINQ 组织数据库结果
【发布时间】:2016-09-14 05:14:14
【问题描述】:

我的电影/电影管理系统有问题。我有桌子,

电影

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

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

【问题讨论】:

  • 但它是一个单一的查询...
  • 您自己的代码还没有得到答案吗?有什么问题?
  • 但是 FilmName 重复了。我需要按照帖子中“我的目标是获取电影列表......”之后提到的顺序。
  • 一个 SQL 查询总是以表格格式返回数据,如果你的意思是你想要一个看起来像该行下方的字符串列表,那么可能使用 T-SQL 或存储过程,但不是单个查询.但是为什么不使用循环从返回的表中生成列表呢?

标签: .net sql-server linq


【解决方案1】:

我希望,这样的事情应该有助于开始(请原谅语法和错字):

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

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多