public static List<TruckWithModel> GetAllTrucks()
{
using (DAD_BaldipContext ctx = new DAD_BaldipContext())
{
var x = ctx.TruckFeatureAssociation
.Include(t => t.Truck)
.Include(tf => tf.Feature)
.Include(tm => tm.Truck.TruckModel)
.Select(it => new TruckWithModel()
{
Colour = it.Truck.Colour,
Size = it.Truck.TruckModel.Size,
RentalPrice = it.Truck.DailyRentalPrice,
Status = it.Truck.Status,
Model = it.Truck.TruckModel.Model,
Rego = it.Truck.RegistrationNumber,
Features = it.Feature.Description
}) ;
return (List<TruckWithModel>)x.ToList();
}
}
此代碼檢索從相對表中的各種屬性值TruckFeatureAssociation,TruckFeature,IndividualTruck和TruckModel。
我遇到的問題是TruckFeatureAssociation同一輛卡車最多有 5 個條目,該表是一個連接表IndividualTruck,TruckFeature其中TruckFeature包含各種功能的表。
對于每個TruckFeatureAssociation不同的物件,TruckWithModel即如果有 3 個相關聯的特征,則每輛卡車在我呼叫此函式的資料網格中顯示三行。
我想要它,以便所有功能都可以存盤在一個物件中。

所以在上面的輸出中,我只想要一行,說警報系統,鍍鉻車輪。
uj5u.com熱心網友回復:
這里的問題是您正在查詢功能,但模型反映了卡車...查詢卡車,獲取它的功能,然后讓您的視圖模型 (TruckWithModel) 幫助格式化視圖的資料..
例如:
[Serializable]
public class TruckWithModel
{
public string Colour { get; set; }
public string Size { get; set; }
public decimal RentalPrice { get; set; }
public string Status { get; set; }
public string Model { get; set; }
public List<string> Features { get; set; } = new List<string>();
public string FormattedFeatures
{
get { return string.Join(", ", Features); }
}
}
現在,當您查詢資料時:
var trucks = ctx.Trucks
.Select(t => new TruckWithModel()
{
Colour = t.Colour,
Size = t.TruckModel.Size,
RentalPrice = t.DailyRentalPrice,
Status = t.Status,
Model = t.TruckModel.Model,
Rego = t.RegistrationNumber,
Features = t.Features.Select(f => f.Description).ToList()
}).ToList();
這假設 Truck 有一個特征集合,其中 TruckFeatureAssociation 只是一個映射物體。如果您的 Truck 的集合基于 TruckFeatureAssociation:
Features = t.Features.Select(f => f.Feature.Description).ToList()
現在,在您想要顯示特征的視圖中,系結到FormattedFeatures屬性以獲取每輛卡車的以逗號分隔的特征串列。
請注意,當您使用 Projection through 時,.Select()您不需要使用.Include()來預先加載相關物體。EF 可以自動計算出加載什么來滿足投影。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/356457.html
標籤:C# sql-server 实体框架 数据绑定
