我正在尋找優雅的,可重複使用的解決方案,以解決一直困擾我多年的問題。因此,在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);
這個「已過期」的邏輯必須重複(可以理解)Expired不是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 [分組查詢]的引用。解決方案非常不同。 – Gats