我有两张桌子:
UserId
UserID
我想做LINQ查询,为我提供一个用户列表,其成员是用户订单列表。
我试过了:
var myNestedData = (from ub in db.Users
join ah in db.UsersOrders on ub.UserId equals ah.UserId
into joined
from j in joined.DefaultIfEmpty()
group j by new { ub.UserId, ub.UserName, ub.UserPhone, ub.Approved } into grouped
where grouped.Key.Approved == true
select new
{
UserId= grouped.Key.UserId,
UserName = grouped.Key.UserName,
UserPhone = grouped.Key.UserPhone,
Orders = grouped
}).ToList();
问题是我进入了Orders
Object<a,UsersOrders>
,这是我没想到的。
这是在性能方面采用解决方案的正确方法吗?
答案 0 :(得分:1)
在我看来,你应该能够保持这么简单:
var myNestedData = (from u in db.Users
where u.Approved == true
select new
{
User = u,
Orders = u.UserOrders
}).ToList();
您正在尝试获取所有已批准用户和该用户订单的列表。我错过了什么吗?
此外,u.UserOrders的名称将取决于您如何配置映射。
答案 1 :(得分:0)
将其更改为
Orders = grouped.ToList()
要查看它是否是潜在的性能问题,请查看生成的SQL以查看它是否为N + 1场景(意味着它为父记录运行一个查询,并为孩子的记录。
我说潜力因为虽然可能不是禁食方法,但它可能不是问题。如果没有明显的性能问题,我不会担心它,而是专注于通过改善体验来改善应用程序,这可能包括提高其他区域的性能的地图。