c# - 如何查询数据库以仅包含 API Json 的搜索元素及其路径?
问题描述
我需要为 net-core/ef-core API 构建一个函数,该函数显示数据库中的一个元素,其中包含指向它的路径中每个对象的数据。
所以,基本上有这样的结构:
许多城市,每个都有一个列表:
一个城市中的多个区域,每个都有一个列表: 区域中的
多个商店,每个报价都有一个列表: 商店中的
多个报价条目,每个都有一个单个变量:
通过外键连接到它的产品。一家商店只能为每个产品提供一个优惠条目(唯一优惠)。所有 DbSet 在下面的第一个代码块(包含)中可见。
我有 2 个变量:
string cityName
和string productName
.
所以我做了这样的查询:
IQueryable<City> cityNameQuery = _context.Cities
.Include(x => x.Areas)
.ThenInclude(x => x.Shops)
.ThenInclude(x => x.ShopOfferEntries)
.ThenInclude(x => x.ProductData).Where(x => EF.Functions.Like(x.Name, "%" + cityName + "%")).AsQueryable();
然后做了这样的过滤:
cityNameQuery = cityNameQuery.Where(x => x.Name.Contains(cityName))
.Where(l => l.Areas.Where(x => x.Shops
.Where(y => y.ShopOfferEntries
.Where(z => z.ProductData.Name.Contains(productName)).Any()).Any()).Any());
然后将其收集到一个列表并返回:
if (pricesByCity == null || pricesByCity.Count() == 0)
{
return Json("Product not available in this city.");
}
pricesByCity = cityNameQuery.ToList();
return Json(pricesByCity);
结果要么显示“该城市没有产品”,要么显示整个城市的所有区域、所有商店及其所有报价,包括报价中其他产品的数据。但并不需要所有这些数据。
Json API 应该打印的内容是:
- 拥有产品面积的城市
- 该区域应仅显示拥有该产品的商店
- 该商店应仅显示产品的报价
- 该报价应仅显示产品的数据
- 产品数据本身。
所以我们可能需要去掉列表中的其他元素,因为每个城市都有很多区域,区域有很多商店等,我们应该只显示那些导致所寻找产品的元素。
以为我可以过滤掉客户端的 json 结果,但这不是一个明智的解决方案。
是否有任何快速、集成的方法来仅显示数据库中项目的路径?
我们如何更改上面的代码以最有效地做到这一点?或者也许我应该重组数据库以获得这样的结果?
解决方案
推荐阅读
- ruby-on-rails - 模块定义的 Ruby on Rails 语法错误
- json - 如何使用 powershell 使用来自 twitter 的流数据?
- c# - 如何为 ASP.NET Core 3.1 配置 Azure App Service 应用程序设置?
- javascript - JS - 输入类型 =“日期”无法识别 oninput/onchange
- mysql - 如何在不注意的情况下最大限度地减少无意中更改数据?
- php - 通过树枝文件中的链接传递视图字段
- mysql - 如何使用 Spring Boot 在 Mysql 数据库中存储正确的日期和时间值?
- php - SilverStripe ModelAdmin searchableFields 函数将字段与顶部的主文本搜索框进行映射
- r - 如何通过删除 R 中的重复项来堆叠数据?
- typescript - Vue 中静态类型的发出事件