1

私は、何年にもわたって私を悩ませてきた問題に対するエレガントで再利用可能な解決策を求めて土地を探しています。したがって、

サイト全体で使用するビジネス ロジックがあるとします。

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 }
    }
4

2 に答える 2

0

に拡張メソッドを作成してみませんDateTimeか? そうすれば、日付があるときはいつでも、それを呼び出して有効期限を取得できます。

static class DateTimeExtensions
{
    public static DateTime ExpiryDate(this DateTime dte)
    {
        return dte.AddMonths(ApplicationConfiguration.Rule3ExpiryLengthInMonths);
    }
}

私があなたの例を正しく理解していればDateAdded、テーブルの日付列であり、そこから有効期限を見つけたいと考えています。次に、これを行うだけです:

var count = groupedByPatient.Count(x => 
                         x.Max(a => a.DateAdded.ExpiryDate()) <= DateTime.Now);
于 2013-05-17T00:27:53.040 に答える