[英]How to get list of ViewModel from database?
我有一個視圖模型類,用於獲取客戶列表及其要約列表。
餐廳景觀模型
public class RestaurantsListVM
{
public Client client { get; set; }
public List<Offer> offers { get; set};
}
客戶模型
public class Client
{
public Guid Id { get; set; }
public String RestaurantName { get; set; }
}
優惠模式
public class Offer
{
public Guid Id { get; set; }
public String OfferName { get; set; }
public decimal OfferPercentage { get; set; }
在我的數據庫中,我有一個ClientOffer表 ,該表還映射客戶及其報價,例如:
***"ClientOfferId,ClientId,OfferId"***
因此,我創建了此函數以從數據庫檢索數據。
public List<RestaurantsListVM> GetRestaurants()
{
List<RestaurantsListVM> restaurantlist = new List<RestaurantsListVM>();
var clients = new Client().GetClients();
foreach (Client c in clients)
{
RestaurantsListVM restaurantdetails = new RestaurantsListVM();
restaurantdetails.client = c;
restaurantdetails.offers = new Offer().GetOffers(c.Id);
restaurantlist.Add(restaurantdetails);
}
return restaurantlist;
}
一切正常。 但是問題在於,它在檢索每個客戶報價時在sql服務器中一次又一次地執行查詢,從而導致性能下降。
我應該如何提高代碼效率以獲得更好的性能?
為什么不為ClientOffer創建模型?
public class ClientOffer
{
public Guid client_id { get; set; }
[ForeignKey("client_id")]
public Client client { get; set; }
public Guid offer_id { get; set; }
[ForeignKey("offer_id")]
public Offer offer { get; set; }
}
在您的客戶模型中,您可以添加報價集合
public class Client
{
public Guid Id { get; set; }
public String RestaurantName { get; set; }
public ICollection<ClientOffer> offers { get; set; }
}
因此,您只需循環來自模型客戶端的屬性提供
您需要一個LINQ查詢,該查詢將在一個SQL查詢中聯接表。 當前,您獲得所有客戶,然后為每個客戶獲得他們的報價。 就像是:
var clientOffers = (from cli in dbContext.Clients
join cli_ofr in dbContext.ClientOffer
on cli.ClientId
equals cli_ofr.ClientId
join ofr in dbContext.Offers
on cli_ofr.OfferId
equals ofr.OfferId
select new {
Client = new Client { Guid = cli.Guid...},
Offer = new Offer { Guid = ofr.Guid... }
}).toList();
這將生成一個SQL查詢,該查詢將返回創建視圖模型所需的所有數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.