Extending the ORM Context is a good approach, but when I am in a system with lots of predefined queries, I likeuse to take another approach, using Extensions methods in order to group the related queries. Let me give an example:
The usage is kept simple like this:
var data = Context.Financial() // This returns a FinancialContextExtensions instance with all Financial grouped queries .GetComplexReportData() // This returns the actual result for your query .ToArray(); I create a file FinancialContextExtensions:
public static partial class ContextQueryExtensions { public static FinancialContextExtensions Financial(this DataContext context) { return new FinancialContextExtensions(context); } } public class FinancialContextExtensions : ContextExtensions { protected readonly DataContext Context; public FinancialContextExtensions(DataContext context) { this.Context = context; } public IEnumerable<FinancialReportInfo> GetComplexReportData(DateTime dateBeing, DateTime dateEnd) { return from a in Context.AAA join b in Context.BBB on ... where ... group ... select new FinancialReportInfo { ... }; } } PS: I don't know if this pattern has a name, but a I remember reading it on a site, don't know what site though...