如何使用lambda表达式返回Collection

时间:2015-07-14 13:15:43

标签: c#

鉴于以下错误是抛出类型转换错误

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;
}

2 个答案:

答案 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>

<小时/> * 我不计算ToDictionaryToDataTable

等投影或转化

答案 1 :(得分:0)

您的代码是正确的,除了Linq Where语句返回您正在查询的集合中的类型的IEnumerable。 因此,创建Collection的简单方法是循环Where返回的IEnumerable并将元素添加到新Collection,或者如果Generic Collection具有AddRange方法,则使用它将IEnumerable添加到您的集合中。