私は、何年にもわたって私を悩ませてきた問題に対するエレガントで再利用可能な解決策を求めて土地を探しています。したがって、
サイト全体で使用するビジネス ロジックがあるとします。
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);
この「期限切れ」ロジックは、(当然のことながら)期限切れはデータベースの列ではないため、繰り返す必要があります。最終的な結果として、ビジネス ロジックがコード全体に散在することになります。理想的には、次のようになります。
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 }
}