簡體   English   中英

如何從數據庫獲取ViewModel列表?

[英]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.

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