diff --git a/贪婪加载.md b/贪婪加载.md index 3108015..bbc917a 100644 --- a/贪婪加载.md +++ b/贪婪加载.md @@ -97,6 +97,53 @@ new List(new[] { song1, song2, song3 }).IncludeMany(g.sqlite, a => a.Tags) 这是一个扩展方法(IncludeMany),方法名与 ISelect.IncludeMany 同名,参数基本一致(除了需要额外传递 IFreeSql 对象参数),功能也一致(包括前面提到的变异)。 +## IncludeMany 两种方式对比 + +方式一(IncludeMany 扩展方法): + +```csharp +var list111 = g.sqlite.Select() + .Page(1, 10) + .ToList(a => new { Id = a.Id }) //查询数据 id + .Select(a => new SysModule { Id = a.Id }).ToList() //内存操作 + .IncludeMany(g.sqlite, a => a.Permissions, then => then.Include(a => a.Button)); +``` + +```sql +SELECT a."Id" as1 +FROM "SysModule" a +limit 0,10 + +SELECT a."Id", a."SysModuleId", a."SysModuleButtonId", a."Status", +a__Button."Id" as5, a__Button."Name", a__Button."EventName", a__Button."EnCode", a__Button."Icon", a__Button."Sort", a__Button."CreateTime" +FROM "SysModulePermission" a +LEFT JOIN "SysModuleButton" a__Button ON a__Button."Id" = a."SysModuleButtonId" +WHERE ((a."SysModuleId") in ('menu1','menu2')) +``` + +--- + +方式二(直接 IncludeMany + ToList): + +```csharp +var list222 = g.sqlite.Select() + .IncludeMany(m => m.Permissions, then => then.Include(a => a.Button)) + .Page(1, 10) + .ToList(); +``` + +```sql +SELECT a."Id", a."ParentId", a."Name", a."Icon", a."UrlAddress", a."IsShow", a."Sort", a."Description", a."CreateTime" +FROM "SysModule" a +limit 0,10 + +SELECT a."Id", a."SysModuleId", a."SysModuleButtonId", a."Status", +a__Button."Id" as5, a__Button."Name", a__Button."EventName", a__Button."EnCode", a__Button."Icon", a__Button."Sort", a__Button."CreateTime" +FROM "SysModulePermission" a +LEFT JOIN "SysModuleButton" a__Button ON a__Button."Id" = a."SysModuleButtonId" +WHERE ((a."SysModuleId") in ('menu1','menu2')) +``` + ## 参考资料 - [《多表查询》](https://github.com/2881099/FreeSql/wiki/%e5%a4%9a%e8%a1%a8%e6%9f%a5%e8%af%a2)