Этот сценарий часто встречается, теперь, когда я использую LinkToSql и создаваемые им классы.
Классический сценарий - две таблицы:
Член
ID
Имя
...
Членство
ID
MemberID (внешний ключ)
Начало (дата / время)
Срок действия (дата / время)
...
Активное членство будет таким, где сейчас между началом и истечением.
Чтобы узнать, есть ли у пользователя активное членство, я создал этот частичный класс для расширения в генерируемом LinkToSql классе-члене:
Partial Public Class Member
Public ReadOnly Property HasActiveMembership() As Boolean
Get
Dim activeMembershipCount As Integer = (From m In Me.Memberships _
Where m.MemberId = Me.MemberId _
And m.StartDate < Now And m.ExpirationDate > Now() _
Select m).Count
If activeMembershipCount > 0 Then Return True Else Return False
End Get
End Property
End Class
Это прекрасно работает для одного участника, но когда я хочу перечислить 700 участников и, если они имеют активное членство или нет, это делает более 700 вызовов в базу данных.
Как мне изменить свою модель / классы?
Я мог бы создать запрос только для списков, в котором все это можно сделать одним запросом, что довольно просто, но я бы хотел этого избежать, если бы мог.