c# – 实体框架.NET Core 2.0查询在执行子查询时挂起执行
发布时间:2020-12-15 21:07:33 所属栏目:百科 来源:网络整理
导读:使用常规版本的EF 6.x,我可以使用以下查询轻松完成子查询: 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 re
|
使用常规版本的EF 6.x,我可以使用以下查询轻松完成子查询:
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();
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
