У нас есть таблица «Документы».Каждый документ должен быть утвержден, прежде чем он станет активным.
Процесс утверждения документа требует нескольких участников.Например, сначала утверждается дизайнер, второй - исполнительный директор, третий - генеральный директор.Генеральный менеджер не может утвердить до руководителя.
В документе есть коллекция утверждающих.«У утверждающих» есть свойства «Индекс», «Имя-утверждающего» и «Утверждено».
Вопрос в том, как использовать LINQ для отображения списка документов, которые пользователь должен утвердить сейчас.Документы должны появиться в списке, когда конкретному пользователю нужно будет их утвердить.
До сих пор мы использовали следующий код ручной фильтрации:
Public ReadOnly Property RequiresMyApproval() As Boolean
Get
If Me.Approved OrElse Me.Approvals.Count = 0 Then Return False
Dim closestUnapproval = GetClosestUnapproval()
Return (closestUnapproval IsNot Nothing AndAlso closestUnapproval.ParentUser.Oid = CurrentUser.Oid)
End Get
End Property
Private Function GetClosestUnapproval() As DocumentApproval
Dim closestUnapprovedIndex As Integer = -1
Dim closestUnapproval As DocumentApproval = Nothing
For Each approval In Me.Approvals
If Not approval.Approved AndAlso approval.Index < closestUnapprovedIndex OrElse Not approval.Approved AndAlso closestUnapprovedIndex = -1 Then
closestUnapprovedIndex = approval.Index
closestUnapproval = approval
End If
Next
Return closestUnapproval
End Function