/// <summary> /// 按设定的条件执行搜索。 /// </summary> /// <param name="pageNum">搜索指定页的设备。如果要搜索第2页及其之后页的数据,则应先设置 PageSize 属性。</param> /// <param name="isReverse">是否对排序信息 OrderInfos 中设定的排序条件执行倒序,如果该参数为 true 将导致整个搜索结果的先后顺序发生逆转,通常情况下应使用 false。</param> /// <param name="keepSource">是否保留所有设备至该搜索结果集合源的引用。当需要对设备进行进一步的数据查询操作,保留源引用可以提升查询性能。</param> /// <returns>符合条件的设备集合。</returns> public DeviceCollection Search(int pageNum, bool isReverse, bool keepSource) { base.PageNum = pageNum; DeviceCollection devices = new DeviceCollection(keepSource); try { System.Data.IDataReader dr = base.GetDataReader(isReverse); if (dr != null) { while (dr.Read()) { int intDeviceId = Function.ToInt(dr[Tables.Device.DeviceId]); Device device = base.Application.GetDeviceInstance(intDeviceId); if (device != null) { device.SetDataReader(dr); if (this.Found != null) { if (keepSource) { if (isReverse) { devices.Insert(0, device); } else { devices.Add(device); } } this.Found(device); } else { if (isReverse) { devices.Insert(0, device); } else { devices.Add(device); } } device.DateRange = this.m_DateRange; } else { DeviceType deviceType = base.Application.DeviceTypeSort.GetDeviceType(Function.ToString(dr[Tables.Device.DeviceType])); if (deviceType != null) { device = deviceType.CreateDevice(); device.SetApplication(base.Application); device.SetDataReader(dr); base.Application.SetDeviceInstance(device); if (this.Found != null) { if (keepSource) { if (isReverse) { devices.Insert(0, device); } else { devices.Add(device); } } this.Found(device); } else { if (isReverse) { devices.Insert(0, device); } else { devices.Add(device); } } device.DateRange = this.m_DateRange; } else { throw new Exception("未发现类型为 " + Function.ToString(dr[Tables.Device.DeviceType]) + " 的设备。"); } } } dr.Close(); } } catch (Exception ex) { throw ex; } finally { base.DbConnection.Close(); } return(devices); }