1. In the Customer class, define a property which returns orders for the current
month only.
C#:
public
EntityList<Order> OrdersForMonth
{…}
VB.NET:
ReadOnly
Property OrdersForMonth() As EntityList(Of
Order) {…}
2. In the getter
for the method, retrieve all the
customer’s
orders.
C#:
//
Don’t do this - it will
copy the EntityListManager
//
from the .Orders ReadOnlyEntityList
too.
//this.mOrdersForMonth = new
EntityList<Order>(this.Orders);
// Do this instead.
this.mOrdersForMonth
= new EntityList<Order>();
this.mOrdersForMonth.AddRange(this.Orders);
VB.NET:
' Don't do this - it will copy the
EntityListManager
' from the Orders ReadOnlyEntityList
too.
'Me.mOrdersForMonth = New EntityList(Of
Order)(Me.Orders)
' Do this instead.
Me.mOrdersForMonth = New EntityList(Of
Order)
Me.mOrdersForMonth.AddRange(Me.Orders)
3. Define filtering criteria using
an anonymous predicate - return true
if OrderDate is for the current month.
C#:
Predicate<Order> filter
= delegate(Order pOrder) {
return
pOrder.OrderDate.Value.Year == DateTime.Now.Year &&
pOrder.OrderDate.Value.Month
== DateTime.Now.Month;
};
VB.NET:
Dim filter As New Predicate(Of Order)(AddressOf
FilterOrdersByDate)
For VB, the implementation of the
predicate occurs outside of the Property
method:
Private
Shared Function FilterOrdersByDate(ByVal
pOrder As Order) _
As Boolean
Return pOrder.OrderDate.Value.Year
= DateTime.Now.Year _
And pOrder.OrderDate.Value.Month
= DateTime.Now.Month
End Function
4. Add a ListManager to make this
a "live" list. The PersistenceManager
will use the filter to keep the list
current. Changes to OrderDate on
existing objects or any new customer
orders or deletions will automatically
be reflected in the list.
C#:
this.mOrdersForMonth.ListManager
=
new EntityListManager<Order>(
this.PersistenceManager,
filter,
new EntityColumn[] { Order.OrderDateEntityColumn
} );
VB.NET:
Me.mOrdersForMonth.ListManager
= _
New EntityListManager(Of
Order)( _
Me.PersistenceManager, _
filter, _
New EntityColumn() { Order.OrderDateEntityColumn
} )
|