使用支持 Group By 翻译的 EF Core 2.1 版本,但是在对键值进行投影之后不再支持 Group By 翻译。
我需要一个查询支持各种不同的分组类型和聚合类型:
分组类型包括:年份、年/月、年/月/日等。
聚合类型包括:平均值、总和、最小值、最大值等。
我创建了两个 switch 语句,一个用于分组,一个用于聚合。我的问题在于我无法延迟执行并在 SQL 中执行分组。否则,结果数据集会非常大。
这是一种合理的方法吗?还是应该使用原始查询?
这个查询已经按照要求进行了延迟和分组,但键类型只适用于年/月,并且如果我想按照其他类型进行分组(例如年/月/日),就无法提供第二个 switch 中聚合的通用解决方案。
一旦将密钥转换为字符串,客户端就会进行分组:
这也会导致客户端发生分组:
我需要一个查询支持各种不同的分组类型和聚合类型:
分组类型包括:年份、年/月、年/月/日等。
聚合类型包括:平均值、总和、最小值、最大值等。
我创建了两个 switch 语句,一个用于分组,一个用于聚合。我的问题在于我无法延迟执行并在 SQL 中执行分组。否则,结果数据集会非常大。
这是一种合理的方法吗?还是应该使用原始查询?
这个查询已经按照要求进行了延迟和分组,但键类型只适用于年/月,并且如果我想按照其他类型进行分组(例如年/月/日),就无法提供第二个 switch 中聚合的通用解决方案。
var query1 = series
.GroupBy(k => new { k.Created.Year, k.Created.Month, });
var result1 = query1
.Select(i => new { i.Key, Value = i.Average(a => a.DataValue) });
一旦将密钥转换为字符串,客户端就会进行分组:
var query2 = series
.GroupBy(k => k.Created.Year.ToString());
var result2 = query2
.Select(i => new { i.Key, Value = i.Average(a => a.DataValue) });
这也会导致客户端发生分组:
var query3 = series
.GroupBy(k => new { k.Created.Year, k.Created.Month, })
.Select(i => new
{
Key = $"{i.Key.Year}-{i.Key.Month}",
Values = i.ToList()
});
有什么想法可以完成我的查询?理想情况下,我需要一个通用的组键,可以对服务器端进行分组或通过查询中的函数传递聚合。生成基于字符串
的键似乎可以确保在客户端进行分组。