我在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相关问答推荐

在 Web.Config 的 Location Path 元素中指定多个目录

在 ASP.NET 中访问没有值的查询字符串参数

将 NUnit 添加到 ASP.NET MVC 测试框架的选项中

asp.net、url 重写模块和 web.config

ASP.NET web api 无法获取 application/x-www-form-urlencoded HTTP POST

VS2013发布Web部署任务失败文件正在使用中

Web Api 请求内容在操作过滤器中为空

我可以创建 .config 文件并将其包含到 web.config 中吗?

Web Api 参数始终为空

Asp.net 中的下拉列表验证使用必填字段验证器

IIS 10 上的 ASP.NET Core 404 错误

如何设置默认页面 asp.net

LINQ:使用 Lambda 表达式获取 CheckBoxList 的所有选定值

与 Twitter Bootstrap Bundle 的 ASP.NET MVC4

如何从url中删除returnurl?

System.Reflection.Assembly.LoadFile 锁定文件

脚本管理器控制实际上是做什么的?

为什么在 MVC4 Razor 布局文件中无法识别 @Scripts 和 @Styles 命令?

将Bundle 包添加到现有的 ASP.NET Webforms 解决方案

ASP.NET 网格视图与列表视图