
var q = from u in db.User let actions = from ua in db.UserActions where ua.UserID == u.ID && ua.Approved select ua where u.Active select new { User = u,Actions = actions.ToList() }var result = await q.ToListAsync() 当我尝试在我的ASP.NET Core 2.0 EntityFramework驱动的应用程序中执行相同的代码时,我的应用程序只是冻结并且永远不会返回结果.
我尝试了一些变体,但是一旦子查询作为初始查询的一部分执行,它们都会挂起:
>子查询(与上面的相同,有一些变化)
>左外连接
另一个子查询变体(也在执行时挂起):
var q = from u in db.User let actions = (from ua in db.UserActions where ua.UserID == u.ID && ua.Approved select ua).ToList() where u.Active select new { User = u,Actions = actions } 又一个子查询变体(也在执行时挂起):
var q = from u in db.User let actions = db.UserActions.Where(ua => ua.UserID == u.ID && ua.Approved) where u.Active select new { User = u,Actions = actions.ToList() } 左外连接的另一个变体(也在执行时挂起):
var forUserID = "test";var q = from u in db.User join ua in db.UserActions on u.ID equals ua.UserID into actions from ua in action.DefaultIfEmpty() where u.Active select new { User = u,Actions = ua} 下面的代码可以工作,但很明显,子查询执行是延迟的,一旦我们尝试访问Action属性,它就会启动另一个查询:
var q = from u in db.User let actions = from ua in db.UserActions where ua.UserID == u.ID && ua.Approved select ua where u.Active select new { User = u,Actions = actions }var result = await q.ToListAsync()foreach (var r in result){ foreach(var a in r.Actions) { // extra database requests is executed for each result row // .. process action. }} 如何执行子查询并获取实体列表,其中每个实体分配了子实体列表,使用子查询接收?
解决方法 我不确定.但是,你可以尝试’.ToList()’.var q = (from u in db.User join ua in db.UserActions on u.ID equals ua.UserID into actions from ua in action.DefaultIfEmpty() where u.Active select new {u,ua}).ToList(); 总结 以上是内存溢出为你收集整理的c# – 实体框架.NET Core 2.0查询在执行子查询时挂起执行全部内容,希望文章能够帮你解决c# – 实体框架.NET Core 2.0查询在执行子查询时挂起执行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)