这篇文章有很多可能的重复。但是我尝试了大部分主题,不幸的是我的错误仍然存在 发生的情况。
错误是:错误1无法将类型
'System.Collections.Generic.List<Report.Business.ViewModels.InvoiceMaster>'
隐式转换为'System.Collections.Generic.IList<ICSNew.Data.InvoiceHD>'
。存在显式转换(您是否错过了演员?)
public IList<InvoiceHD> GetAllInvoiceMasterDetailsByInvoiceId(int InvoiceId)
{
var dbMstDtl = ireportrepository.GetAllInvoiceMasterDetailsByInvoiceId(InvoiceId);
var MstDtl = from mst in dbMstDtl
select new Report.Business.ViewModels.InvoiceMaster
{
ModifiedDate = mst.ModifiedDate,
SubTotal = Convert.ToDecimal(mst.SubTotal),
TotalDiscount = Convert.ToDecimal(mst.TotalDiscount),
VAT = Convert.ToDecimal(mst.VAT),
NBT = Convert.ToDecimal(mst.NBT),
AmtAfterDiscount = Convert.ToDecimal(mst.AmtAfterDiscount)
};
return MstDtl.ToList();
}
在某些帖子中,当他们使用返回MstDtl.AsEnumerable()。ToList();
时,我发现这个问题已经解决了。但在我的情况下,它也无法正常工作(获得错误)
答案 0 :(得分:11)
假设InvoiceMaster
派生或实施InvoiceHD
,并且您正在使用C#4和.NET 4或更高版本,则可以使用通用差异:
return MstDtl.ToList<InvoiceHD>();
这使用IEnumerable<InvoiceMaster>
为IEnumerable<InvoiceHD>
的事实,因为IEnumerable<T>
中T
是协变。
另一种解决方法是将MstDtl
的声明更改为使用显式输入:
IEnumerable<InvoiceMaster> MstDtl = ...;
(我还建议遵循常规C#命名,其中局部变量以小写字母开头,但这是另一回事。)
答案 1 :(得分:2)
您输入的错误类型。您的方法签名表示您要返回InvoiceHD
的集合,但实际上您正在返回InvoiceMaster
您输入的错误类型
答案 2 :(得分:1)
如果InvoiceHD是Report.Business.ViewModels.InvoiceMaster的子类型:
MstDtl.Cast<InvoiceHD>().ToList()
或者如果ICSNew.Data.InvoiceHD不是从Report.Business.ViewModels.InvoiceMaster派生的,那么您可以手动映射数据:
var MstDtl = from mst in dbMstDtl
select new InvoiceHD //return InvoiceHD instead of Report.Business.ViewModels.InvoiceMaster
{
ModifiedDate = mst.ModifiedDate,
SubTotal = Convert.ToDecimal(mst.SubTotal),
TotalDiscount = Convert.ToDecimal(mst.TotalDiscount),
VAT = Convert.ToDecimal(mst.VAT),
NBT = Convert.ToDecimal(mst.NBT),
AmtAfterDiscount = Convert.ToDecimal(mst.AmtAfterDiscount)
}
或将函数的返回类型从InvoiceHD更改为
public IList<Report.Business.ViewModels.InvoiceMaster> GetAllInvoiceMasterDetailsByInvoiceId(int InvoiceId)