我正试图摆脱这个我无法将System.Collections.Generic.List
转换为IEnumerable
的问题,下面是我的代码:
IEnumerable<PY_History_TransactionTAB> FilteredReport;
var ReportData = db.PY_History_TransactionTAB
.Where(x => x.SystemCode == SysCode)
.GroupBy(x => x.EmployeeCode);
FilteredReport = (IEnumerable<PY_History_TransactionTAB>)ReportData.Select(x => new
{
EmployeeCode = x.Key,
H_SalaryDays = x.Sum(y => y.H_SalaryDays ?? 0),
H_NET_Overtime = x.Sum(y => y.H_NET_Overtime),
H_Overtime_Amount = x.Sum(y => y.H_Overtime_Amount),
H_SL_Breakup1 = x.Sum(y => y.H_SL_Breakup1 ?? 0),
H_SL_Breakup2 = x.Sum(y => y.H_SL_Breakup2 ?? 0),
H_SL_Breakup3 = x.Sum(y => y.H_SL_Breakup3 ?? 0),
H_OT_Allowance1 = x.Sum(y => y.H_OT_Allowance1 ?? 0),
H_OT_Allowance2 = x.Sum(y => y.H_OT_Allowance2 ?? 0),
H_OT_Allowance3 = x.Sum(y => y.H_OT_Allowance3 ?? 0),
H_OT_Allowance4 = x.Sum(y => y.H_OT_Allowance4 ?? 0),
H_OT_Allowance5 = x.Sum(y => y.H_OT_Allowance5 ?? 0)
}).ToList();
当我运行应用程序时,它会在分配给 FilteredReport 变量时抛出运行时异常System.InvalidCastException
,说:
{“无法转换类型为'System.Collections.Generic.List
1[<>f__AnonymousType6
的对象65 [System.String,System.Decimal,System.Nullable1[System.Decimal],System.Nullable
1 [System.Decimal] System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal, System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal ,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal, System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal, System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal, System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal, System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal, System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal, System.Decimal,System.Decimal,System.Decimal,System.Decimal,System.Decimal]]'来键入'System.Collections .Generic.IEnumerable`1 [HrAndPayrollSystem.Models.PY_History_TransactionTAB]”。“}
所以,我得到的是我不对,我需要找到一个正确的方法,我该怎么做才能摆脱这个问题或者将List
转换成什么是正确的方法IEnumerable
?任何帮助将深表感谢,提前致谢!
更新
好的,RenéVogt的答案对于上述问题是正确的,但后来又遇到了另一个例外System.NotSupportedException
:
实体或复杂类型 'HrAndPayrollSystem.Models.PY_History_TransactionTAB' 不能在LINQ to Entities查询中构造。
我该如何解决?
答案 0 :(得分:1)
原因是您返回匿名类型的List
。因此,此List<anonymousType>
与IEnumerable<HrAndPayrollSystem.Models.PY_History_TransactionTAB>
完全不同。
因此,您需要将Select
来电更改为:
FilteredReport = (IEnumerable<PY_History_TransactionTAB>)ReportData.Select(x =>
new PY_History_TransactionTAB // specify type!!
{
EmployeeCode = x.Key,
// shortened for brevity... set properties appropriatly
}).ToList();
现在返回的列表的类型为List<PY_History_TransactionTAB>
,它实现了IEnumerable<PY_History_TransactionTAB>
。