【发布时间】:2020-07-24 18:53:12
【问题描述】:
在做每一件事之前,我尝试了很多答案和修复,但对我没有用, 问题是我试图获取这个 Dto 的列表:
public string Ministry { get; set; }
public string Department { get; set; }
public string EmployeeCount { get; set; }
public List<string> Accounts { get; set; }
使用这个 linq 查询:
var result = await (from emp in _db.Employees
join c in _db.EmployeeBlackList
on emp.AccountNo equals c.AccountNo into joined
from c in joined.DefaultIfEmpty()
group emp by new { emp.Ministry, emp.Department }
into groups
select new MinstryDepartmentEmployeeCount()
{
Ministry = groups.Key.Ministry,
Department = groups.Key.Department,
EmployeeCount = groups.Count().ToString(),
Accounts = groups.Select(x => x.AccountNo).ToList()
}).ToListAsync();
我得到的错误异常是这样的:
发生了一个或多个错误。 (LINQ 表达式 'Select
(\r\n source: GroupByShaperExpression:\r\n KeySelector: new { \r\n Ministry = e.Ministry, \r\n Department = e.Department\r\ n }, \r\n ElementSelector:EntityShaperExpression: \r\n EntityType: Employee\r\n ValueBufferExpression: \r\n ProjectionBindingExpression: EmptyProjectionMember\r\n IsNullable: False\r\n , \r\n 选择器: ( x) => x.AccountNo)' 无法翻译。要么以可翻译的形式重写查询,要么通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 的调用显式切换到客户端评估,或 ToListAsync()。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2101038。)
我已经知道这个语句会产生错误:
Accounts = groups.Select(x => x.AccountNo).ToList()
我无法获取员工表中的所有信息,因为它有超过 200 万行和超过 7 列。
这个查询的主要目的是转换这个:
Ministry Department AccountNo
A AA 1111
A AA 2222
B BB 3333
B BB 4444
进入这个:
[
{
Ministry: 'A' ,
Department: 'AA' ,
EmployeeCount: 2 ,
Accounts:[
{
'1111'
},
{
'2222'
},
]
},
{
Ministry: 'B' ,
Department: 'BB' ,
EmployeeCount: 2 ,
Accounts:[
{
'3333'
},
{
'4444'
},
]
}
]
提前致谢。
更新:这个问题和我想要的一样,我使用了相同的答案,但我仍然得到相同的错误,所以我相信原因是 asp.net core 迁移到 3.oquestionLink
【问题讨论】:
-
几个细节可能会有所帮助:哪个 EF 版本(6.x?核心?)? AccountNo 的数据类型?目标数据库(SqlServer、Sqlite 等)?
-
Ef core,accountNo 是 string,目标数据库是 postgres
标签: c# entity-framework linq asp.net-core-3.1