我有一个方法 GetAllReportGroups ,其中我刚刚返回一个IEnumerable但在代码审查中我被告知不,改变它!
所以现在我创造了更多的课程,我认为"这个ReportGroupMaster将是适当的返回类型,我得到了 这个错误。我不再使用IEnumerable,所以这让我感到困惑。
无法隐式转换类型 '&System.Collections.Generic.IEnumerable LT;> items,int Id,int SortOrder,int Type>>'至 ' System.Collections.Generic.List&#39 ;.存在显式转换(你错过了吗? 投?)
方式:
public List<ReportGroupMaster> GetAllReportGroups(string language)
{
List<ReportGroup> reportGroups = _envyUnitOfWork.ReportGroupsAll.GetAll().ToList();
List<ReportDefinition> reportDefinition = _envyUnitOfWork.ReportDefinitions.GetAll().ToList();
List<TraxReport> traxReports = _envyUnitOfWork.TraxReports.GetAll().ToList();
List<ReportGroupItem> reportGroupItems = reportGroups.Select(reportGroup => new ReportGroupItem() {Id = reportGroup.Id, ReportGroupName = reportGroup.ReportGroupName, SortOrder = reportGroup.SortOrder, Type = (int) ReportTypeNames.ReportGroup}).ToList();
//List<ReportGroupMaster> reportGroupItems = reportGroups.Select(reportGroup => new ReportGroupMaster() {Id = reportGroup.Id, ReportGroupName = reportGroup.ReportGroupName, SortOrder = reportGroup.SortOrder, Type = (int) ReportTypeNames.ReportGroup}).ToList();
var query = from d in reportGroupItems
join r in reportDefinition on d.Id equals r.ReportGroupID into items
join cr in traxReports on d.Id equals cr.ReportGroupID into customItems
orderby d.SortOrder
select new
{
d.ReportGroupName,
items = items.Select(r => new
{
r.Id,
r.ReportGroupName,
r.SortOrder,
r.ReportGroupID,
r.Type// = (int) ReportTypeNames.ReportDefinition //r.Type
}).Concat(customItems.Select(cr => new
{
cr.Id,
cr.ReportGroupName,
cr.SortOrder,
cr.ReportGroupID,
cr.Type// = 4 //(int) ReportTypeNames.TraxReport //cr.Type
})).OrderBy(e => e.SortOrder).ToList(),
d.Id,
d.SortOrder,
d.Type
};
return query;
}
有什么想法吗?
ReportGroupMaster
public class ReportGroupMaster
{
public string ReportGroupName { get; set; }
public List<ReportGroupChild> Items { get; set; }
public int Id { get; set; }
public int SortOrder { get; set; }
public int Type { get; set; }
}
ReportGroupChild
public class ReportGroupChild
{
public int Id { get; set; }
public string ReportGroupName { get; set; }
public int SortOrder { get; set; }
public int ReportGroupID { get; set; }
public int Type { get; set; }
}
答案 0 :(得分:2)
Linq
查询会返回IEnumberable<anonymoustype>
,但预期的返回类型为List<ReportGroupMaster>
,这是导致错误的原因。
使用此代码。
public List<ReportGroupMaster> GetAllReportGroups(string language)
{
List<ReportGroup> reportGroups = _envyUnitOfWork.ReportGroupsAll.GetAll().ToList();
List<ReportDefinition> reportDefinition = _envyUnitOfWork.ReportDefinitions.GetAll().ToList();
List<TraxReport> traxReports = _envyUnitOfWork.TraxReports.GetAll().ToList();
List<ReportGroupItem> reportGroupItems = reportGroups.Select(reportGroup => new ReportGroupItem() {Id = reportGroup.Id, ReportGroupName = reportGroup.ReportGroupName, SortOrder = reportGroup.SortOrder, Type = (int) ReportTypeNames.ReportGroup}).ToList();
//List<ReportGroupMaster> reportGroupItems = reportGroups.Select(reportGroup => new ReportGroupMaster() {Id = reportGroup.Id, ReportGroupName = reportGroup.ReportGroupName, SortOrder = reportGroup.SortOrder, Type = (int) ReportTypeNames.ReportGroup}).ToList();
var query = from d in reportGroupItems
join r in reportDefinition on d.Id equals r.ReportGroupID into items
join cr in traxReports on d.Id equals cr.ReportGroupID into customItems
orderby d.SortOrder
select new ReportGroupMaster()
{
ReportGroupName =d.ReportGroupName,
Items = items.Select(r => new
{
r.Id,
r.ReportGroupName,
r.SortOrder,
r.ReportGroupID,
r.Type// = (int) ReportTypeNames.ReportDefinition //r.Type
}).Concat(customItems.Select(cr => new
{
cr.Id,
cr.ReportGroupName,
cr.SortOrder,
cr.ReportGroupID,
cr.Type// = 4 //(int) ReportTypeNames.TraxReport //cr.Type
})).OrderBy(e => e.SortOrder).ToList(),
Id = d.Id,
SortOrder = d.SortOrder,
Type = d.Type
};
return query.ToList();
}