Frage

Ich habe Daten erhalten DataServiceCollection EquipBookings, aber aus dieser Liste möchte ich Daten nach dem in der Datenauswahl ausgewählten Datum filtern

Dafür versuche ich Folgendes zu schreiben, aber es funktioniert nicht:

Ich habe die Fehlermeldung „Typliste kann nicht implizit in Dataservicecollection konvertiert werden“ erhalten

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

Der vollständige Code lautet:

        #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;
                }
            }
        }
War es hilfreich?

Lösung

Dies gibt eine Liste zurück:

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

Während der Rückgabetyp Ihres FilterJobs Methode ist DataServiceCollection<EquipBooking> und es gibt keine implizite Konvertierung zwischen den beiden.Der Compiler versteht nicht, wie man das eine in das andere konvertiert.

Sie könnten so etwas tun:

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

        return dataServiceCollection;

    }

Es gibt eine Konstruktorüberladung von DataServiceCollection das dauert eine IEnumerable{T} (ein IEnumerable von EquipBookings in Ihrem Fall) als Parameter.Praktischerweise ist dies genau das, was die EquipBookings.Where(c => c.CreatedOn == SeletedDateChanged); kehrt zurück.

Andere Tipps

Sie müssen den generischen IEnumerable in die ObservableCollection konvertieren.Sie können eine Erweiterungsmethode für diese Konvertierung schreiben.Beispiele sind hier ebenfalls vorhanden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top