0

我有 2 张桌子:

  1. PK的用户数据 UserId
  2. 带有FK的用户订单 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>我没想到的内部。

这是在性能方面接近解决方案的正确方法吗?

4

2 回答 2

1

在我看来,您应该能够保持简单:

     var myNestedData = (from u in db.Users
                         where u.Approved == true
                         select new
                         {
                             User = u,
                             Orders = u.UserOrders
                         }).ToList();

您正在尝试获取所有已批准用户和用户订购的列表。我错过了什么吗?

此外,u.UserOrders 的名称将取决于您如何配置映射。

于 2013-04-22T18:46:16.937 回答
0

将其更改为

Orders = grouped.ToList()

要查看这是否是潜在的性能问题,请查看生成的 SQL 以查看它是否是 N+1 方案(这意味着它对父记录运行一个查询,对子记录运行 N 个查询。

我说潜力是因为虽然可能不是禁食方法,但它可能不是问题。如果没有明显的性能问题,我不会担心,而是专注于通过改善体验来使应用程序变得更好,这可能包括改善地图其他区域的性能。

于 2013-04-22T18:45:46.943 回答