鉴于以下错误是抛出类型转换错误
public Collection<AssignedReadingScheduleDTO> GetAssignedReadingScheduleList(int substationId, DateTime getLastSyncDate, out string errorMessage)
{
AssignedReadingScheduleDTO filter = new AssignedReadingScheduleDTO();
Collection<AssignedReadingScheduleDTO> colAsgnReadSchedulList = null;
MessageServiceClass messageService = new MessageServiceClass();
ExceptionCodeDTO errorMessageCode = null; errorMessage = string.Empty;
AssignedReadingSchedule_IDA daAsgnreadingScheduleList = (new AssignedReadingScheduleDA()).CreateDBObject();
try
{
filter.LocalCntrID = substationId;
filter.StationType = 2;
colAsgnReadSchedulList = new Collection<AssignedReadingScheduleDTO>();
colAsgnReadSchedulList = daAsgnreadingScheduleList.GetAssignedReadingScheduleList(0, Int32.MaxValue, filter, out errorMessageCode).Where(x=>x.UpdateOn >= getLastSyncDate) as Collection<AssignedReadingScheduleDTO>;
}
catch (Exception ex)
{
errorMessageCode.ReferenceNumber = messageService.GetExceptionRefNumber(ex);
}
return colAsgnReadSchedulList;
}
答案 0 :(得分:1)
您无法使用标准Linq方法直接创建Collection<T>
。内置Linq方法可以创建的唯一具体类型是List<T>
(通过ToList
)和数组实例(通过ToArray
)。这里有一些选择:
创建您自己的扩展方法ToCollection
,该方法将创建Collection<T>
(或找到具有此类方法的第三方库)
循环显示结果并将每个项目添加到集合中。
创建List<T>
并使用Collection<T>
IList<T>
构造函数
将您的退货类型更改为ICollection<T>
(或IList<T>
或IEnumerable<T>
)
<小时/> * 我不计算
ToDictionary
和ToDataTable
等投影或转化
答案 1 :(得分:0)
您的代码是正确的,除了Linq Where语句返回您正在查询的集合中的类型的IEnumerable。 因此,创建Collection的简单方法是循环Where返回的IEnumerable并将元素添加到新Collection,或者如果Generic Collection具有AddRange方法,则使用它将IEnumerable添加到您的集合中。