因此,我有一个属性将解析为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))
答案 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();
}