Pregunta

tengo datos en Colección de servicios de datos EquipBookings, pero de esta lista quiero filtrar datos, según la fecha seleccionada en el selector de datos

Para esto intento escribir esto, pero no funciona:

Recibí el error "No se puede convertir implícitamente la lista de tipos a Dataservicecollection

  private DateTime _seletedDateChanged;
        public DateTime SeletedDateChanged
        {
            get { return _seletedDateChanged; }
            private set
            {
                _seletedDateChanged = value; 

                         // here i filter collections

                EquipBookings = FilterJobs(_seletedDateChanged);
                NotifyPropertyChanged("SeletedDateChanged");
            }
        }

        public DataServiceCollection<EquipBooking> FilterJobs(DateTime SeletedDateChanged)
        {
            return EquipBookings.Where(c => c.CreatedOn == SeletedDateChanged).ToList();
        }

El código completo es:

        #region EquipBookings
        // Define the binding collection for EquipBookings.
        private DataServiceCollection<EquipBooking> _equipBookings;

        public DataServiceCollection<EquipBooking> EquipBookings
        {
            get { return _equipBookings; }
            private set
            {
                _equipBookings = value;
                _equipBookings.LoadCompleted += OnEquipBookingLoaded;
                NotifyPropertyChanged("EquipBookings");
            }
        }
        public void LoadEquipBookingsData()
        {
            _context = new THA001_devEntities(_rootUri);
            EquipBookings = new DataServiceCollection<EquipBooking>(_context);
            var query = _context.EquipBooking.Expand("Status").Where(x => x.Status.Description.ToLower() == "confirmed").OrderBy(d => d.BookedFromDteTme);
            EquipBookings.LoadAsync(query);
            IsDataLoaded = true;
        }

        private void OnEquipBookingLoaded(object sender, LoadCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                IsDataLoaded = false;
                if (EquipBookings.Continuation != null)
                {
                    EquipBookings.LoadNextPartialSetAsync();
                    EquipBookingList = EquipBookings;
                }
            }
        }
¿Fue útil?

Solución

Esto devuelve una lista:

return EquipBookings.Where(c => c.CreatedOn == SeletedDateChanged).ToList();

Mientras que el tipo de devolución de su FilterJobs el método es DataServiceCollection<EquipBooking> y no hay conversión implícita entre los dos.El compilador no sabe cómo convertir uno en otro.

Podrías hacer algo como esto:

public DataServiceCollection<EquipBooking> FilterJobs(DateTime SeletedDateChanged)
    {
        var equipBookings = EquipBookings.Where(c => c.CreatedOn == SeletedDateChanged);
        var dataServiceCollection = new DataServiceCollection<EquipBooking>(equipBookings);

        return dataServiceCollection;

    }

Hay una sobrecarga del constructor de DataServiceCollection eso requiere un IEnumerable{T} (un IEnumerable de EquipBookings en su caso) como parámetro.Convenientemente, esto es exactamente lo que EquipBookings.Where(c => c.CreatedOn == SeletedDateChanged); devoluciones.

Otros consejos

Necesitas convertir genérico IEnumerable a observableCollection.Puede escribir un método de extensión para hacer esta conversión.Los ejemplos se dan aquí también ¿Cómo convertir iEnumerable a observableCollection?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top