![](/img/trans.png)
[英]ASP.NET Core 3.1 and Entity Framework Core : one-to-many relationship
[英]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.