나는 오래 동안 나를 괴롭히는 문제에 대한 우아하고 재사용 가능한 솔루션을 찾고 있습니다. 따라서, linq-sql 문에서 사용자 지정 메서드 또는 대리자 사용
는 내가 모든 사이트를 통해 사용하는 일부 비즈니스 로직을 말해봐 :public DateTime ExpiryDate
{
get { return DateAdded.Date.AddMonths(ApplicationConfiguration.Rule3ExpiryLengthInMonths); }
}
그리고 Linq에 문 (, 그것은 복잡 할 수있는이 얼마나 간단한에 관해서는 개최되지 않음) :
groupedByPatient.Count(x =>
x.Max(a => System.Data.Objects.EntityFunctions.AddMonths(a.DateAdded, ApplicationConfiguration.Rule3ExpiryLengthInMonths))
<= DateTime.Now);
이 "만료 된"논리는 (이해할 만하게) 반복되어야합니다. 만료 된 열은 db가 아닙니다. 결과적으로 우리는 코드 전체에 분산 된 비즈니스 로직을 갖게됩니다. 이상적으로 우리는 할 것이다 :
var count = groupedByPatient.Count(x =>
x.Max(a => a.ExpiryDate)
<= DateTime.Now);
을 이론적으로 당신이, 당신이 코드 밖으로 추상적 할 수 있어야 Linq에의 "C#을"규칙을 준수 말한대로 :
public DateTime ExpiryDate
{
get { return System.Data.Objects.EntityFunctions.AddMonths(
DateAdded, ApplicationConfiguration.Rule3ExpiryLengthInMonths).D }
}
나는 여기 혼란이 groupedByPatient를 사용하고 있다고 생각합니다. 그 결과가 이미 구체화되었거나 DataContext.Patients. [grouping query]가 될 것입니다. 해결책은 아주 다릅니다. – Gats