发布
社区首页 >问答首页 >ASP.NET核心2.2 -简单数据库查询问题

ASP.NET核心2.2 -简单数据库查询问题
EN

Stack Overflow用户
提问于 2019-04-24 01:29:09
回答 1查看 105关注 0票数 0

尝试在数据库中查询特定记录时,模型中的此记录具有与其关联的ICollection。下面是一个例子:

假设a有一堆商店:

代码语言:javascript
代码运行次数:0
复制
class StoreLocation {
    public int StoreId
    public string LocationName
    public ICollection<SaleItems> SaleItems
}

class SaleItems {
    public int SaleItemId
    public string ItemName
    public string ItemCost
}

所以使用实体框架...

如何在被搜索的特定商店中搜索价格低于5美元的SaleItems?

代码语言:javascript
代码运行次数:0
复制
var SaleItemsAtStore = _context.StoreLocations
.Where(location => location.StoreId == SomethingUserInputs

var CheapSaleItems = SaleItems...

....not确定下一步该怎么做,或者我可能一开始就走错了方向。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-24 01:40:35

您可以通过StoreLocation完成此操作,但效率会很低,因为您必须查询出所有SaleItem,然后在内存中对它们进行过滤:

代码语言:javascript
代码运行次数:0
复制
var store = await _context.StoreLocations.Include(x => x.SaleItems)
    .SingleOrDefaultAsync(x => x.StoreId == storeId);
var saleItems = store.SaleItems.Where(x => x.ItemCost < 5);

或者,也可以更好地,您可以只显式加载您想要的销售商品,但您仍然必须首先查询商店,这意味着一个不必要的查询:

代码语言:javascript
代码运行次数:0
复制
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实体上有一个显式的外键属性:

代码语言:javascript
代码运行次数:0
复制
[ForeignKey(nameof(StoreLocation))]
public int StoreLocationId { get; set; }
public StoreLocation StoreLocation { get; set; }

然后,您可以简单地执行以下操作:

代码语言:javascript
代码运行次数:0
复制
var saleItems = await _context.SaleItems
    .Where(x => x.ItemCost < 5 && x.StoreLocationId == storeId).ToListAsync();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55816533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档