我在我的LINQ代码上收到此错误

Client projection contains reference to constant expression of through instance method
This could potentially cause memory leak. Consider making the method static so that it does not capture constant in the instance

histories = await _resourceContext.Histories
    .AsNoTracking()
    .Where(x => x.LmoId == request.LmoId)
    .OrderByDescending(x => x.DateCreated)
    .Skip(fromPage).Take(request.PageSize)
    .Select(x => new HistoryDto
    {
        Id = x.Id,
        DateCreated = x.DateCreated.ToString(),
        CreatorName = GetAdvisorFullName(x.CreatedBy, cancellationToken)
    })
    .ToListAsync(cancellationToken);

   private string GetAdvisorFullName(long advisorId, CancellationToken cancellationToken)
   {
      var advisorDetails = _mediator.Send(new GetAdvisorQuery(advisorId), cancellationToken);
      string fullName = $"{advisorDetails.Result.FirstName} {advisorDetails.Result.LastName}";
      return fullName;
   }

我试过了

  • 通过在查询中直接调用上下文,这是不允许的,因为在一个调用中不允许两个上下文

  • 首先将其转换为可查询的,然后列出

  • 使Get方法异步

  • 如果我将此方法设为静态方法,则中介调用会出现错误

推荐答案

只需将调用移至查询之外:

histories = await _resourceContext.Histories
    .AsNoTracking()
    .Where(x => x.LmoId == request.LmoId)
    .OrderByDescending(x => x.DateCreated)
    .Skip(fromPage).Take(request.PageSize)
    .Select(x => new HistoryDto
    {
        Id = x.Id,
        DateCreated = x.DateCreated.ToString()
    })
    .ToListAsync(cancellationToken);

foreach(var history in histories)
{
     history.CreatorName = GetAdvisorFullName(x.CreatedBy, cancellationToken);
}

还要注意的是,最好创建一个GetAdvisorFullName的版本,它将批量获取所有名称.

Csharp相关问答推荐

具有多个应用程序服务器的Azure Signal

发布.NET框架项目将.NET核心元素注入到web. connect中

如何使用C#中的图形API更新用户配置文件图像

我无法在Ubuntu下编译使用microsoft.extension.configurationbuilder jsonapi和mono mcs的c#应用程序

编写DataAnnotations自定义验证器的多种方法

. NET Core DB vs JSON模型设计

如何使用XmlSerializer反序列化字符串数组?

将现有字段映射到EFCore中的复杂类型

在路由中使用枚举

如何使用C#中的主构造函数功能使用多个构造函数?

我想在文本框悬停时在其底部显示一条线

Blazor在FluentButton onClick事件上设置参数

在此系统上已禁用获取正在运行的脚本.&在ASP.NET Core Web API中

有没有类似于扩展元素的合并元组的语法?

正在try 从Blazor中的API读取JSON

.NET8->;并发词典总是比普通词典快...怎么回事?[包含基准结果和代码]

实体框架-IsRequired()与OnDelete()

如何在一次数据库调用中为ASP.NET核心身份用户加载角色

数据库操作预计影响1行,但实际影响0行; after _dbContext.SaveChanges();

当要删除的子模型没有父模型的1:多属性时,如何告诉实体框架设置1:1 FK条目?