Updated with statements that can be executed or deferred.
// Example models public class SomeModel { public int Id { get; set; } public string Name { get; set; } public List Items { get; set; } } public class SomeOtherModel { public int Id { get; set; } public string Text { get; set; } } //Expression mapper - not executed public Expr<Func> Map_SomeTable_SomeModel_Expr() { return x => new SomeModel { Id = x.Id, Name = x.Name, Items = db.SomeOtherTable.Where(y => y.SomeTableId == x.Id).Select(Map_SomeOtherTable_SomeOtherModel_Expr()).ToList() } } //Function mapper - compiled and makes the query execute; // can also be obtained by calling Compile() on an expression; // can be called as a function public Func Map_SomeTable_SomeModel_Func = x => new SomeModel { Id = x.Id, Name = x.Name, Items = db.SomeOtherTable.Where(y => y.SomeTableId == x.Id).Select(Map_SomeOtherTable_SomeOtherModel_Func()).ToList() }; public Expr<Func> Map_SomeOtherTable_SomeOtherModel_Expr() { return x => new SomeOtherModel { Id = x.Id, Text = x.Text } } public Func Map_SomeOtherTable_SomeOtherModel_Func = x => new SomeOtherModel { Id = x.Id, Text = x.Text }; //Example repository method public List GetAllSomeModels() { var query = db.SomeTable.Select(Map_SomeTable_SomeModel_Expr()); // Is saved as query and not executed var model = db.SomeTable.Select(Map_SomeTable_SomeModel_Func); // Query is executed and result set is returned }
Quick Links
Legal Stuff