【问题标题】:how to filter data from DataServiceCollection ? in WCF data service如何从 DataServiceCollection 过滤数据?在 WCF 数据服务中
【发布时间】:2013-11-16 11:41:52
【问题描述】:

我在 DataServiceCollection EquipBookings 中获得了数据,但我想从这个列表中过滤数据,根据从数据选择器中选择的日期

为此我尝试写这个,但它不起作用:

我收到错误“无法将类型列表隐式转换为 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();
        }

完整代码是:

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

【问题讨论】:

    标签: c# asp.net wcf windows-store-apps wcf-data-services


    【解决方案1】:

    这会返回一个列表:

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

    虽然您的 FilterJobs 方法的返回类型是 DataServiceCollection&lt;EquipBooking&gt; 并且两者之间没有隐式转换。编译器不明白如何将一个转换为另一个。

    你可以这样做:

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

    DataServiceCollection 的构造函数重载将 IEnumerable{T}(在您的情况下为 EquipBookingsIEnumerable)作为参数。方便的是,这正是 EquipBookings.Where(c =&gt; c.CreatedOn == SeletedDateChanged); 返回的内容。

    【讨论】:

    • 我收到错误:无法将项目添加到集合中。当 DataServiceCollection 中的项目被 DataServiceContext 跟踪时,在项目加载到集合中之前无法添加新项目。
    • @vb1 更改了示例。你能试试吗?
    【解决方案2】:

    您需要将通用 IEnumerable 转换为 ObservableCollection。您可以编写扩展方法来执行此转换。这里也给出了例子How to convert IEnumerable to ObservableCollection?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      相关资源
      最近更新 更多