簡體   English   中英

從二級表(實體框架)獲取數據

[英]Getting data from a second level table (entity framework)

使用EF處理MVC 5應用程序。

我的數據庫中有3個表。 作為一個簡單的例子,讓我用這個...。

  • 汽車
    • ID
    • CarName
  • 顏色
    • ID
    • ColorName
  • CarsColors
    • CarId
    • ColorId

汽車和顏色是“主”表。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM