代码之家  ›  专栏  ›  技术社区  ›  Niyazi Babayev

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

  •  -2
  • Niyazi Babayev  · 技术社区  · 2 年前

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

    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)
    

    我在这里要做的是为 轮廓 在该查询中动态。问题是我不知道 轮廓 将根据其进行过滤。


    问题 is:如何在此处动态实现此过滤器?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Svyatoslav Danyliv    2 年前

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

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

    然后您可以通过 Invoke 扩展名:

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