我有以下数据模型,我需要按以下条件对
方法是:
但是我收到了一个错误消息:
另一方面,如果我不考虑第二个分组,查询就可以正常工作:
ResponseItem
的列表进行分组:
- 首先:按
ResponseItem.Group
进行分组 - 其次:按
ResponseItem.SubGroup
进行分组,但只考虑最近的一项,也就是考虑ResponseItem.CreationDate
代码:
public class ResponseItem
{
public string Group { get; set; }
public string SubGroup { get; set; }
public double Value { get; set; }
public DateTime CreationDate { get; set; }
}
public class GroupedResponseItem
{
public string Group { get; set; }
public List<ResponseItem> Items { get; set; }
}
方法是:
public List<GroupedResponseItem> GetGroupedData( IQueryable<ResponseItem> responseItems )
{
return responseItems
.OrderByDescending(i => i.CreationDate)
.GroupBy(i => i.Group)
.Select(grp => new GroupedResponseItem()
{
Group = grp.Key,
Items = grp
.GroupBy(i => new { i.SubGroup })
.Select(grp => grp.First())
.Select(i => new ResponseItem()
{
SubGroup = i.SubGroup,
CreationDate = i.CreationDate,
Value = i.Value
}).ToList()
})
.ToList();
}
但是我收到了一个错误消息:
正如标题所述,我正在使用 .NET 6 上的 Entity Framework。'LINQ表达式“ProjectionBindingExpression: 0”无法翻译。请将查询重写为可翻译的形式,或通过插入对'AsEnumerable'、'AsAsyncEnumerable'、'ToList'或'ToToListAsync'的调用来明确地切换到客户端评估'
另一方面,如果我不考虑第二个分组,查询就可以正常工作:
public List<GroupedResponseItem> GetGroupedData(IQueryable<ResponseItem> responseItems)
{
return responseItems
.OrderByDescending(i => i.CreationDate)
.GroupBy(i => i.Group)
.Select(grp => new GroupedResponseItem()
{
Group = grp.Key,
Items = grp
.Select(i => new ResponseItem()
{
SubGroup = i.SubGroup,
CreationDate = i.CreationDate,
Value = i.Value
})
.ToList()
})
.ToList();
}
.OrderByDescending(i => i.CreationDate).ToList()
。 - Paul Sinnema.ToList()
。通常,ToList 的意思是“现在就做”,而在您的查询中,您已经完成了一半的评估。 - NeilToList()
,我会遇到相同的问题。 - user2382627responseItems
已经是一个ResponseItem
对象序列,你为什么要在.Select
中创建新实例呢?这完全是多余的。 - Dai