【问题标题】:Getting data from a second level table (entity framework)从二级表中获取数据(实体框架)
【发布时间】:2017-03-13 20:14:18
【问题描述】:

使用 EF 开发 MVC 5 应用程序。

我的数据库中有 3 个表。举个简单的例子,让我用这个....

  • 汽车
    • 身份证
    • 车名
  • 颜色
    • 身份证
    • 颜色名称
  • 汽车颜色
    • 车牌号
    • 颜色标识

汽车和颜色是“主”表。 CarsColors 是一个包含各种组合的交叉引用表。

目标:创建一个显示表格的视图。对于每一行,它将显示汽车详细信息。将有一个“颜色”列。在“颜色”列中,会有该车使用的以逗号分隔的颜色列表。 (这是我问题的核心。)所以,例如....

<table>
  <th>Cars</th>
  <th>Colors</th>
  <tr>
      <td>Kia Sportage</td>
      <td>Red, Blue, Green</td>
  </tr>
  <tr>
      <td>Toyota Camery</td>
      <td>Green, Black</td>
  </tr>
  <tr>
      <td>Honda Odyssey</td>
      <td>(nothing)</td>
  </tr>  
</table>

我不确定该怎么做。我知道我的 Cars select 可以使用 .Include() 来包含 CarsColors。但是,我将如何“升级”一级以获得 Cars.ColorName?我需要循环通过 CarsColors 以填充每一行的最后一列,但使用颜色表作为实际颜色名称。

谢谢

【问题讨论】:

    标签: c# asp.net-mvc entity-framework razor


    【解决方案1】:

    您可以使用导航属性来获取颜色名称:

    public partial class CarsColors
    {
        public int CarId { get; set; }
        public int ColorId { get; set; }
    
        public virtual Car Car { get; set; }
        public virtual Color Color { get; set; }
    }
    

    因此拥有CarsColors 类型的对象,您可以读取Color 的名称,如下所示:

    obj.Color.ColorName
    

    以下内容可以满足您的需求:

    var cars = dbContext.Cars
                        .Include(car=>car.CarsColors)
                        .GroupBy(car=>car.CarName)
                        .Select(gr=> new 
                        {
                            CarName = gr.Key,
                            Colors = string.Join(",", gr.Select(car=>car.CarsColors.Color.ColorName))
                        });
    

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多