كيفية تصفية البيانات من DataServiceCollection؟في خدمة بيانات WCF
-
21-12-2019 - |
سؤال
لقد حصلت على البيانات 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;
}
}
}
المحلول
يؤدي هذا إلى إرجاع قائمة:
return EquipBookings.Where(c => c.CreatedOn == SeletedDateChanged).ToList();
بينما نوع الإرجاع الخاص بك FilterJobs
الطريقة هي DataServiceCollection<EquipBooking>
وليس هناك تحويل ضمني بين الاثنين.لا يفهم المترجم كيفية تحويل أحدهما إلى الآخر.
يمكنك أن تفعل شيئا مثل هذا:
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}
(أ IEnumerable
ل EquipBookings
في حالتك) كمعلمة.مريح هذا هو بالضبط ما EquipBookings.Where(c => c.CreatedOn == SeletedDateChanged);
عائدات.
نصائح أخرى
تحتاج إلى تحويل Generic iEnumperable إلى OverlessableCollection.يمكنك كتابة طريقة تمديد للقيام بهذا التحويل.يتم إعطاء أمثلة هنا أيضا كذلك كيفية تحويل ienumerable إلى الملاحظ؟