尝试查询数据库中的特定记录,模型中的该记录具有与其关联的ICollection。所以这是一个例子:
假设一家商店很多。
class StoreLocation {
public int StoreId
public string LocationName
public ICollection<SaleItems> SaleItems
}
class SaleItems {
public int SaleItemId
public string ItemName
public string ItemCost
}
因此,使用实体框架...
如何在要搜索的特定商店中搜索价格低于5美元的SaleItem?
var SaleItemsAtStore = _context.StoreLocations
.Where(location => location.StoreId == SomethingUserInputs
var CheapSaleItems = SaleItems...
....不确定该在哪里使用,否则可能我一开始就走错了方向。
答案 0 :(得分:2)
您可以通过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();