![](/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.