在 C# EF Core/LINQ 中从一对多的一侧查询关系数

Querying number of relationship from the one side of one-to-many in C# EF Core/LINQ

所以我有一个非常复杂的查询,我想 return 指定半径内订单量最高的前 10 个产品。到目前为止,我有一个工作查询来获取一定半径内的所有产品(使用原始 SQL 查询)。现在的问题是按订单数量排序。下面是查询。我可以根据需要提供更多详细信息。提前致谢!

var prods = _context.Products
                    .FromSql($"SELECT p.* FROM (SELECT s.\"storefrontID\", z.radius, z.distance_unit * DEGREES(ACOS(COS(RADIANS(z.latpoint)) * COS(RADIANS(a.lat)) * COS(RADIANS(z.longpoint - a.lon)) + SIN(RADIANS(z.latpoint)) * SIN(RADIANS(a.lat)))) AS distance FROM public.\"Addresses\" AS a, public.\"Storefronts\" AS s JOIN (SELECT {lat} AS latpoint, {lon} AS longpoint, {radius} AS radius, {distance_unit} AS distance_unit) AS z ON 1=1 WHERE s.\"addressID\" = a.\"addressID\" AND a.lat BETWEEN z.latpoint - (z.radius / z.distance_unit) AND z.latpoint  + (z.radius / z.distance_unit) AND a.lon BETWEEN z.longpoint - (z.radius / (z.distance_unit * COS(RADIANS(z.latpoint)))) AND z.longpoint + (z.radius / (z.distance_unit * COS(RADIANS(z.latpoint))))) AS a, public.\"Storefronts\" AS s WHERE distance <= radius AND s.\"storefrontID\" = a.\"storefrontID\"")
                    .Include(p => p.orderProductConnectors.Count())
                    .OrderByDescending(p => p.orderProductConnectors)
                    .AsNoTracking()
                    .ToList();

请注意,我使用 postgreSQL 作为我的数据库解决方案。

猜测:

var prods = _context.Products
                    .FromSql($"SELECT p.* FROM (SELECT s.\"storefrontID\", z.radius, z.distance_unit * DEGREES(ACOS(COS(RADIANS(z.latpoint)) * COS(RADIANS(a.lat)) * COS(RADIANS(z.longpoint - a.lon)) + SIN(RADIANS(z.latpoint)) * SIN(RADIANS(a.lat)))) AS distance FROM public.\"Addresses\" AS a, public.\"Storefronts\" AS s JOIN (SELECT {lat} AS latpoint, {lon} AS longpoint, {radius} AS radius, {distance_unit} AS distance_unit) AS z ON 1=1 WHERE s.\"addressID\" = a.\"addressID\" AND a.lat BETWEEN z.latpoint - (z.radius / z.distance_unit) AND z.latpoint  + (z.radius / z.distance_unit) AND a.lon BETWEEN z.longpoint - (z.radius / (z.distance_unit * COS(RADIANS(z.latpoint)))) AND z.longpoint + (z.radius / (z.distance_unit * COS(RADIANS(z.latpoint))))) AS a, public.\"Storefronts\" AS s WHERE distance <= radius AND s.\"storefrontID\" = a.\"storefrontID\"")
                    .OrderByDescending(p => p.orderProductConnectors.Count())
                    .AsNoTracking()
                    .ToList();