Registros sobrepostos entre duas datas usando o Linq
No meu aplicativo, um usuário pode delegar outro usuário para aprovar pedidos.
O que eu preciso validar, é que não há referências circulares por isso, seUser A
é delegadoUser B
durante um certo período,User B
não posso delegarUser A
para qualquer momento dentro desse período, ou seja, há uma sobreposiçãodd/mm/yyyy
):
Delegator Delegated To DateFrom DateTo
User A User B 01/11/2012 08/11/2012
User A User B 16/12/2012 24/12/2012
Este é o código que eu tenho que verificar para sobreposições:
var overlaps = .Session.QueryOver<DelegateOrderApproval>()
.Where(x => x.DateFrom > DateTime.Now && delegateOrderApproval.DelegatedUser.UserId == x.DelegatorUser.UserId)
.And(x => x.DateFrom >= delegateOrderApproval.DateFrom && delegateOrderApproval.DateTo <= x.DateTo
|| (x.DateFrom >= delegateOrderApproval.DateFrom && x.DateTo <= delegateOrderApproval.DateTo)
|| (x.DateFrom <= delegateOrderApproval.DateFrom && x.DateTo >= delegateOrderApproval.DateFrom)
|| (x.DateFrom <= delegateOrderApproval.DateFrom && x.DateTo >= delegateOrderApproval.DateTo))
.List();
Se eu tentar adicionar o seguinte registro:
Delegator: User B
Delegated To: User A
Date From: 15/11/2012
DateTo: 21/11/2012
não deve haver conflito comoUser B
não é um delegado paraUser A
nesse período de tempo? Está pegando o recorde em dezembro.
Eu pesquisei por código de sobreposição no período e tentei de tudo, mas nada parece funcionar.
Alguma ideia?