C# 实体框架核心GroupBy-相关实体上的聚合函数
在EF Core中,当使用GroupBy时,我无法让聚合函数处理来自相关实体的字段。下面是一个例子来说明我的意思: 我正在尝试运行以下查询:C# 实体框架核心GroupBy-相关实体上的聚合函数,c#,entity-framework,linq,entity-framework-core,C#,Entity Framework,Linq,Entity Framework Core,在EF Core中,当使用GroupBy时,我无法让聚合函数处理来自相关实体的字段。下面是一个例子来说明我的意思: 我正在尝试运行以下查询: var list = db.Loans .GroupBy(x => x.Book.Isbn) .Select( x => new LoanQueryResult { Isbn = x.Key, AverageAge = x.Average(y => y.Member.
var list = db.Loans
.GroupBy(x => x.Book.Isbn)
.Select(
x => new LoanQueryResult
{
Isbn = x.Key,
AverageAge = x.Average(y => y.Member.Age) // note here that I am navigating to a related entity
}
)
.ToList();
因此,上述查询的目标是,对于每本Isbn图书,我需要借阅该书的会员的平均年龄
实体框架核心返回的错误如下:
The LINQ expression '(EntityShaperExpression:
EntityType: Loan
ValueBufferExpression:
(ProjectionBindingExpression: EmptyProjectionMember)
IsNullable: False
).Member.Age' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
假设查询需要从Loans表开始,我如何才能使其工作?
这是我的模型(如果有帮助):
公共课堂教材
{
公共int Id{get;set;}
公共字符串Isbn{get;set;}
公共字符串标题{get;set;}
公共IList贷款{get;set;}
}
公共班级成员
{
公共int Id{get;set;}
公共字符串名{get;set;}
公共字符串姓氏{get;set;}
公共整数{get;set;}
公共IList贷款{get;set;}
}
公共类贷款
{
公共int Id{get;set;}
public int BookId{get;set;}
public int MemberId{get;set;}
公共日期时间起始日期{get;set;}
公共日期时间结束日期{get;set;}
公共图书{get;set;}
公共成员成员{get;set;}
}
我会在GroupBy之前取消规范化
var list = db.Loans
.Select(x => new
{
x.Book.Isbn,
x.Member.Age
}
.GroupBy(x => x.Isbn)
.Select(
x => new LoanQueryResult
{
Isbn = x.Key,
AverageAge = x.Average(y => y.Age)
}
)
.ToList();
var list = db.Loans
.Select(x => new
{
x.Book.Isbn,
x.Member.Age
}
.GroupBy(x => x.Isbn)
.Select(
x => new LoanQueryResult
{
Isbn = x.Key,
AverageAge = x.Average(y => y.Age)
}
)
.ToList();