选择中具有多个参数的EF核心表达式

时间:2020-10-08 11:46:22

标签: c# sql-server entity-framework-core

因此,我有一个属性将解析为Select方法。这可以使用一个参数,但是我可以使它使用两个参数吗?如果我做不到,那该怎么办呢?我正在使用EF Core 3.1.8。使用SqlServer 3.1.8程序包。

private static Expression<Func<ClassOne, bool, ClassTwo> Summary
{
  get
  {
    return (p, myBool) => new ClassTwo()
    {
      ListOfItems = p.ListWithMyItems.Where(i => i.Field == myBool)
    }
  }
}

这是我的表情。我用这种方法查询。

public async Task<ClassTwo> GetSummaryAsync(bool isAdmin = false)
{
  return await _context
    .DatabaseTable // type of DbSet<ClassOne>
    .Select(Summary) // how do I parse isAdmin to Summary?
    .ToListAsync();
}

所以我希望你能看到我的问题。我想避免该方法中的where子句,因为我还有至少10个其他方法以不同方式使用此Expression,并且在我的情况下,它将变成嵌套的Where,这不可能查询。我不希望C#为我完成这项工作,请让SQL Server处理。

谢谢!


编辑:

我在GetSummaryAsync中尝试过此操作,但这是不可能的:

.Select(i => (i, isAdmin))

1 个答案:

答案 0 :(得分:0)

定义扩展方法

public static class Extensions {
    public static IQueryable<ClassTwo> Summary(this IQueryable<ClassOne> one, bool myBool)
    {
        return one.Select(p => new ClassTwo
        {
            ListOfItems = p.ListWithMyItems.Where(i => i.Field == myBool)
        });
    }
}

并像这样使用它。

public async Task<ClassTwo> GetSummaryAsync(bool isAdmin = false)
{
  return await _context
    .DatabaseTable 
    .Summary(isAdmin)
    .ToListAsync();
}