...带有单个异步查询中的实体框架。本质上,我不仅要获得总和,而且要获取用于计算单个呼叫中
SomeColumn
列的总和的行数。到目前为止,我只在两个电话中都设法做到这一点:
using (var context = new myEntities())
{
// 1st query which does .SumAsync(x => x.SomeColumn)
// 2nd query which performs a .Count() on the result set
}
像上面提供的SQL一样,可以在一个异步调用中进行此操作吗?我应该在SQL侧创建视图或存储的Proc吗?
用
efcore6.0
进行测试
以下
await Table.GroupBy(_ => 1, (_, rows) => new
{
Count = rows.Count()
Sum = rows.Sum(x => x.Column),
Average = rows.Average(x => x.Column),
})
.FirstOrDefaultAsync();
sql查询:
SELECT TOP(1)
COUNT(*) AS [Count]
SUM([t].[Column]) AS [Sum],
AVG([t].[Column]) AS [Average],
FROM[Table] AS [t]
var query = await (from zz in db.SomeTable
where zz.Foo > 1
group zz by 1 into grp
select new
{
rowCount = grp.CountAsync(),
rowSum = grp.SumAsync(x => x.SomeColumn)
}).ToListAsync();
await Table.GroupBy(_ => 1)
.Select(group => new
{
Count = group.Count(),
Sum = group.Sum(x => x.Column),
Average = group.Average(x => x.Column)
})
.FirstOrDefaultAsync();
Npgsql
var foo = from item in context.Items
group item by item.ID into grp
select new
{
Value = grp.Sum(f => f.ID),
Count = grp.Count()
};
await foo.ToListAsync();