c# - 使用 linq 计算 EF Core 中的平均评分
问题描述
用户可以按城市、品牌、服务类型和评级搜索公司。我已经开发了这样的查询,但在评分部分出现错误。错误信息如下:
LINQ 表达式 'DbSet .Join( external: DbSet, inner: f => f.Id, outerKeySelector: c => c.FirmId, innerKeySelector: (f, c) => new TransparentIdentifier<Firm, Comment>( outer = f , inner = c )) .GroupBy( 来源: ti => ti.Outer, keySelector: ti => new {firm = ti.Outer, rating = ti.Inner.Rate })' 无法翻译。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2101038。
添加评分部分后,我遇到了这个错误。我怎样才能解决这个问题?我认为以这种方式提取数据不会有效。我应该如何开发这个地方?我还与您分享我用于查询的代码。
public async Task<IEnumerable<Firm>> GetFirmsForCustomerSearch(int cityId, int brandId, int serviceTypeId, int rate)
{
var query = from firms in AracsalContext.Firm select firms;
if (brandId > 0)
query = from firms in query
join firmBrands in AracsalContext.Firmbrand on new { f1 = firms.Id, f2 = brandId } equals new { f1 = firmBrands.FirmId, f2 = firmBrands.BrandId }
select firms;
if (serviceTypeId > 0)
query = from firms in query
join firmServices in AracsalContext.Firmservice on new { f1 = firms.Id, f2 = serviceTypeId } equals new { f1 = firmServices.FirmId, f2 = firmServices.ServiceId }
select firms;
if (cityId > 0)
query = from firms in query
where firms.CityId == cityId
select firms;
if (rate > 0)
{
query = from firms in query
join comments in AracsalContext.Comment on firms.Id equals comments.FirmId
group new
{
firm = firms,
rating = comments.Rate
} by firms into g
where g.Average(r => r.rating) > rate
select g.Key;
}
var result = await query.ToListAsync();
return result;
}
太感谢了。斋月
解决方案
您需要按一些 Id 进行分组,例如公司。Id
query = from firms in query
join comments in AracsalContext.Comment on firms.Id equals comments.FirmId
group new
{
firm = firms,
rating = comments.Rate
} by firms.Id into g
where g.Average(r => r.rating) > rate
select g.Key;
推荐阅读
- reactjs - useAuthState() 是否每次都使用 cookie 或请求?它在内部如何运作?
- python - 获取上次下载文件的下载链接 - Selenium
- java - 错误:ResultSet 没有正确定位,也许你需要调用 next
- reactjs - 显示所选图像的图像详细信息
- r - 无法在 R 闪亮中显示表格
- docker - 从 docker 容器内部访问 WAN 上的外部 IP,从 docker compose 移动到 kubernetes
- algorithm - 如何在函数中选择算法
- laravel - 为什么 Laravel 授权私人广播频道不起作用?“channels.php”不工作
- matlab - semilogy、loglog 不能用于将 y 轴设置为对数刻度
- go - Go 中的异步模式