我正在寻找一个优雅的、可重复使用的解决方案来解决困扰我多年的问题。因此,
假设我在整个网站上都使用了一些业务逻辑:(不要对这有多简单,它可能很复杂)
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 }
}