ASP.NET 核心 2.2 - 简单的数据库查询问题
ASP.NET Core 2.2 - Simple DB Query Question
尝试在数据库中查询特定记录,模型中的该记录有一个与之关联的 ICollection。所以这是一个例子:
假设有很多商店:
class StoreLocation {
public int StoreId
public string LocationName
public ICollection<SaleItems> SaleItems
}
class SaleItems {
public int SaleItemId
public string ItemName
public string ItemCost
}
所以使用 entity framework...
如何在搜索到的特定商店中搜索价格低于 5 美元的特卖商品?
var SaleItemsAtStore = _context.StoreLocations
.Where(location => location.StoreId == SomethingUserInputs
var CheapSaleItems = SaleItems...
..不知道该去哪里,或者我一开始就走错了方向。
您可以通过 StoreLocation
完成,但效率很低,因为您必须查询所有 SaleItem
,然后在内存中过滤它们:
var store = await _context.StoreLocations.Include(x => x.SaleItems)
.SingleOrDefaultAsync(x => x.StoreId == storeId);
var saleItems = store.SaleItems.Where(x => x.ItemCost < 5);
或者,更好的是,您可以明确地只加载您想要的促销商品,但您仍然必须先查询商店,这意味着一个不必要的查询:
var store = await_context.StoreLocations.FindAsync(storeId);
var saleItems = await _context.Entry(store)
.Collection(x => x.SaleItems).Query()
.Where(x => x.ItemCost < 5).ToListAsync();
最好的方法是在您的 SaleItem
实体上有一个显式外键 属性:
[ForeignKey(nameof(StoreLocation))]
public int StoreLocationId { get; set; }
public StoreLocation StoreLocation { get; set; }
然后,你可以简单地做:
var saleItems = await _context.SaleItems
.Where(x => x.ItemCost < 5 && x.StoreLocationId == storeId).ToListAsync();
尝试在数据库中查询特定记录,模型中的该记录有一个与之关联的 ICollection。所以这是一个例子:
假设有很多商店:
class StoreLocation {
public int StoreId
public string LocationName
public ICollection<SaleItems> SaleItems
}
class SaleItems {
public int SaleItemId
public string ItemName
public string ItemCost
}
所以使用 entity framework...
如何在搜索到的特定商店中搜索价格低于 5 美元的特卖商品?
var SaleItemsAtStore = _context.StoreLocations
.Where(location => location.StoreId == SomethingUserInputs
var CheapSaleItems = SaleItems...
..不知道该去哪里,或者我一开始就走错了方向。
您可以通过 StoreLocation
完成,但效率很低,因为您必须查询所有 SaleItem
,然后在内存中过滤它们:
var store = await _context.StoreLocations.Include(x => x.SaleItems)
.SingleOrDefaultAsync(x => x.StoreId == storeId);
var saleItems = store.SaleItems.Where(x => x.ItemCost < 5);
或者,更好的是,您可以明确地只加载您想要的促销商品,但您仍然必须先查询商店,这意味着一个不必要的查询:
var store = await_context.StoreLocations.FindAsync(storeId);
var saleItems = await _context.Entry(store)
.Collection(x => x.SaleItems).Query()
.Where(x => x.ItemCost < 5).ToListAsync();
最好的方法是在您的 SaleItem
实体上有一个显式外键 属性:
[ForeignKey(nameof(StoreLocation))]
public int StoreLocationId { get; set; }
public StoreLocation StoreLocation { get; set; }
然后,你可以简单地做:
var saleItems = await _context.SaleItems
.Where(x => x.ItemCost < 5 && x.StoreLocationId == storeId).ToListAsync();