![](/img/trans.png)
[英]Entity Framework Core, retrieve data from second level related table with aggregation function
[英]Getting data from a second level table (entity framework)
使用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选择项可以使用.Include()包含CarsColors。 但是,我将如何向上“一级”获得Cars.ColorName? 我需要通过CarsColors循环以填充每行的最后一列,但是使用Colors表作为实际的颜色名称。
谢谢
您可以使用导航属性获取颜色名称:
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))
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.