我在try 按Customer.name或Customer.Legalname进行排序时遇到此错误. 但如果我按标题排序,它就行了

 public async Task<ActionResult<ResultSet<Registry>>> 
        GetRegistries([FromQuery]ListOptions<RegistryFilter> options = null) {

        var query = DbContext.Registries.AsNoTracking()
            query = select new Registry {
                        Id = registry.Id,
                        Alias = registry.Alias,
                        Customer = new Customer {
                            Id = registry.Customer.Id,
                            LegalName = registry.Customer.LegalName,
                            Name = registry.Customer.Name,
                        },
                        Title = registry.Title,
                        Membership = membership.Role
                    };
        }

        if (!string.IsNullOrWhiteSpace(options.Search)) {
            var term = options.Search.Trim().ToLowerInvariant();
            query = query.Where(x => 
                x.Title.ToLower().Contains(term) || 
                x.Customer.LegalName.ToLower().Contains(term) || 
                x.Customer.Name.ToLower().Contains(term));
        }
        return await query.ToResultSetAsync(options);
    

并且我收到以下错误

System.InvalidOperationException:LINQ表达式的DbSet .LeftJoin( 外部:DbSet, 内部:D=&gt;EF.Property&lt;可为空的&gt;(d,"CustomerId"), OuterKeySelector:d0=&gt;EF.Property&lt;可为空的&gt;(d0,"ID"), InnerKeySelector:(O,I)=&gt;新的透明标识符&lt;数据库注册表,数据库客户&>( 外部=o, 内部=i )) .OrderBy(d=&gt;EF.Property&lt;Nullable&gt;(d.Inside,"ID")==NULL?空:新客户{ Id=d.Inner.ID, LegalName=d.Inner.LegalName, 名称=d.Inner.Name } .name)‘无法翻译.以可翻译的形式重写查询,或者通过插入对AsEnumerable()、AsAsyncEnumerable()、ToList()或ToListAsync()的调用来显式切换到客户端计算.

推荐答案

try 在投影之前应用过滤.大致是这样的:

query = DbContext.Registries.AsNoTracking() 
                    
if (!string.IsNullOrWhiteSpace(options.Search)) {
    var term = options.Search.Trim().ToLowerInvariant();
    query = query.Where(x => 
                x.Title.ToLower().Contains(term) || 
                x.Customer.LegalName.ToLower().Contains(term) || 
                x.Customer.Name.ToLower().Contains(term)); 
}


return await query
    .Select(registry => new Registry 
    {
         Id = registry.Id,
         Alias = registry.Alias,
         Customer = new Customer 
         {
             Id = registry.Customer.Id,
             LegalName = registry.Customer.LegalName,
             Name = registry.Customer.Name,
             Notes = registry.Customer.Notes
         },
         Title = registry.Title,
         Schema = registry.Schema
    })
   .ToResultSetAsync(options);

Asp.net相关问答推荐

在这个 For 循环计数没有增加

将 ASP.NET 成员资格表添加到我自己的现有数据库中,还是应该配置一个单独的 ASP.NET 成员资格数据库?

带有 Web 套接字的 SignalR

如何在没有实体框架的情况下使用 ASP.NET Identity 3.0

您对 Windows Workflow Foundation 有何体验?

在 Asp.net Rowcommand 事件中获取行索引

Devexpress 或 Telerik Controls 比较

在 asp.net 中为动态 PDF 指定文件名

如何配置 ELMAH 以使用 Windows Azure?我在 Elmah.axd 上得到 404

ASP.NET 中的全局资源与本地资源

如何在 ASP.Net 的客户端 (JavaScript) 上判断 Page.Validate()?

如何使用 ASP.NET 和 jQuery 返回 JSON

SignalR /signalr/hubs 404 未找到

如何将数据集转换为数据表

在 ASP.NET MVC 中获取服务器机器名称?

GridView 按代码隐藏列

为什么 IFormFile 显示为空,我该如何解决?

Sys.WebForms.PageRequestManagerServerErrorException:处理服务器上的请求时发生未知错误.

POST 字符串到 ASP.NET Web Api 应用程序 - 返回 null

在 ASP.NET 中写入文件以响应后回发不起作用