You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Entity Framework的Sum查询修改为可等待(Awaitable)形式?

实现异步Sum查询的修改方案

首先修正原代码的语法错误:原查询中Where条件的括号未闭合,正确的同步写法应为:

myClassTwo.TotalAmount = _context.MyClassOne
                                 .Where(p => p.id == 1)
                                 .Sum(x => x.Amount);

要改为异步可等待的调用,只需做以下两点修改:

  • 使用EF Core提供的异步聚合方法SumAsync替代同步的Sum
  • 在调用前添加await关键字,同时确保所在方法标记为async

修改后的完整代码示例:

using Microsoft.EntityFrameworkCore; // 需引入此命名空间才能使用SumAsync

public class MyClassOne
{
    public int id { get; set; }
    public decimal Amount { get; set; }
}

public class MyClassTwo
{
    public decimal TotalAmount { get; set; }
}

// 所在方法需标记为async,返回类型为Task或Task<T>
public async Task CalculateTotalAsync()
{
    MyClassTwo myClassTwo = new MyClassTwo();

    myClassTwo.TotalAmount = await _context.MyClassOne
                                           .Where(p => p.id == 1)
                                           .SumAsync(x => x.Amount);
}

关键说明

  • SumAsync是EF Core为IQueryable提供的异步扩展方法,会将查询异步发送到数据库执行,避免阻塞主线程
  • 包含await的方法必须声明为async,且返回类型需对应为Task(无返回值)或Task<T>(有返回值)
  • 若需要处理空序列的情况,可使用重载版本指定默认值:await _context.MyClassOne.Where(...).SumAsync(x => (decimal?)x.Amount) ?? 0;

内容的提问来源于stack exchange,提问作者Diomedes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:27:08