返回包含属于另一个列表的成员的列表

时间:2013-04-22 18:40:24

标签: c# linq-to-entities

我有两张桌子:

  1. PK UserId
  2. 的用户数据
  3. FK UserID
  4. 的UsersOrders

    我想做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>,这是我没想到的。

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

2 个答案:

答案 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场景(意味着它为父记录运行一个查询,并为孩子的记录。

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