簡體   English   中英

將具有一對多關系的 SQL 查詢轉換為具有父/子 object 結構的 ASP.NET 核心/實體框架核心調用

[英]Convert SQL query with a one-to-many relationship to an ASP.NET Core / Entity Framework Core call with a parent/children object structure

您可以在 SqlFiddle 上看到我的 db 表結構:

http://sqlfiddle.com/#!18/05fce/12/0

我有這個 SQL 查詢,它返回產品列表(webspiderproduct 表),並且對於每個產品,它列出了每個商店的最低價格(webspiderproductprice 表)。 這是查詢:

select 
    t1.ProductId,
    t1.productname,
    t2.shopId,
    t2.price as lowestPrice
from 
    webspiderproduct t1
join 
    (select 
         *,
         row_number() over (partition by webspiderproductid, shopid 
                            order by price asc) as rn 
     from webspiderproductprice) t2 on t1.productid = t2.webspiderproductid
where 
    rn = 1
order by 
    ProductId

我現在正在嘗試轉換此查詢,以便可以使用 Entity Framework Core 通過 ASP.NET Core 調用它。 問題是我寧願它像這樣返回它的數據:

 ProductId: 1, ProductName: "sample product1"
   shopId: 1, lowestPrice: 100
   shopId: 2, lowestPrice: 199
 ProductId: 2, ProductName: "sample product 2"
   shopId: 1, lowestPrice: 99
   shopId: 2, lowestPrice: 119
   shopId: 3, lowestPrice: 19

這樣就可以很容易地在視圖中使用外部 foreach 產品循環,然后為每個 product.lowestShopPrices 循環調用內部循環。

但是,查詢應該被結構化,以便它返回一個產品列表,其中每個產品都包含一個 shopids/shopprices 列表。

您將如何更改 SQL 查詢,以便它使用 Entity Framework Core 和父/子結構返回數據?

假設您的課程看起來像這樣:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class ProductPrice
{
    public int Id { get; set; }
    public int ShopId { get; set; }
    public int Price { get; set; }
    public int ProductId { get; set; }
}

您可以編寫 EF 查詢:

var result = ctx.Products
            .Join(ctx.Prices
                    .GroupBy(n => new { n.ProductId, n.ShopId })
                    .Select(n => new{ n.Key.ProductId, n.Key.ShopId, MinPrice = n.Min(m => m.Price) }),
                p => p.Id, pp => pp.ProductId, (p, pp) => new { p.Id, p.Name, pp.ShopId, pp.MinPrice })
            .OrderBy(n => n.Id)
            .ToList();

這將產生您需要的結果。

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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