如何动态地在表达式中应用表达式?
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));
所以,我有 属性,这是一个表达式。
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));