为什么在这里使用tolist()不是一个好方法?

Osh*_*ati 0 c# linq entity-framework

这不是一个好方法......!有谁能说为什么?

var dbc= new SchoolContext();
var a=dbc.Menus.ToList().Select(x=> new {
                             x.Type.Name,
                             ListOfChildmenus = x.ChildMenu.Select(cm=>cm.Name),
                             ListOfSettings = x.Settings.SelectMany(set=>set.Role)
                                         });
Run Code Online (Sandbox Code Playgroud)

Raz*_*tru 5

因为当您调用.ToList()或.FirstOrDefault()依此类推(当您枚举时),您的查询将被执行.

所以,当你dbc.Menus.ToList()从数据库中带入所有菜单的内存,而你却不希望如此.

您只想将您选择的内容(子菜单列表和设置列表)引入内存.

相关的进一步阅读:http://www.codeproject.com/Articles/652556/Can-you-explain-Lazy-Loading - 可能你在使用延迟加载

如果你想为你的IQueryable添加一个过滤器,你可能会读到有关可见的,可疑的http://blog.micic.ch/net/iqueryable-vs-ienumerable-vs-ihaveheadache之间的区别

还有一些dinamic过滤https://codereview.stackexchange.com/questions/3560/is-there-a-better-way-to-do-dynamic-filtering-and-sorting-with-entity-framework