如何动态地在表达式中应用表达式?

How to apply expression inside expression dynamically?

所以,我有 属性,这是一个表达式。

public Expression<Func<Profile, bool>> ManagerFilter { get; set; }

接下来,我要实现这个过滤器,也就是上面动态的表达式:

var queryTest = applicantCacheRepo
            .Include(a=>a.Profile)
            .ThenInclude(p=>p.ProfileEmployer)
            .ThenInclude(p=>p.Employer)
            .Include(a=>a.ProfileApplicationDetail)
            .ThenInclude(p=>p.ApplicationStatusSysCodeUnique)
            .Include(a=>a.Person)
            .ThenInclude(p=>p.PersonDetail)
            .Include(a=>a.JobSpecification)
            .ThenInclude(j=>j.JobSpecificationDetail)
            .FirstOrDefaultAsync(a=>a.Profile == filters.ManagerFilter)

我在这里尝试做的是在此查询中动态应用 Profile 的过滤器。问题是我不知道 Profile 的确切 属性 将根据它进行过滤。


问题是:我怎样才能在这里动态实现这个过滤器?

只有在第三方图书馆的帮助下才能做到这一点。我建议使用 LINQKit。它只需要配置 DbContextOptions:

builder
    .UseSqlServer(connectionString) // or any other provider
    .WithExpressionExpanding();     // enabling LINQKit extension

然后您可以通过 Invoke 扩展程序使用您的过滤器:

var queryTest = await
   ...
   .FirstOrDefaultAsync(a => filters.ManagerFilter.Invoke(a.Profile));