2013-04-22 20 views
0

名單我有2個表:返回與成員屬於另一個列表

  1. PK的用戶數據UserId
  2. UsersOrders與FKUserID

我想做的事情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(); 

的問題是,我得到的內部OrdersObject<a,UsersOrders>,我不指望。

這是接近在性能方面的解決方案的正確方法?

回答

0

將其更改爲

Orders = grouped.ToList() 

要看看它是否是一個潛在性能問題,看看所生成,看它是否是一個N + 1個方案中的SQL(這意味着它會運行一個查詢父記錄和N查詢的子記錄。

我說潛在因爲雖然未必是禁食的方法,它可能不是一個問題。如果沒有明顯個性能問題,我不會擔心,轉而專注於使應用程序更好地改善經驗,其中可能包括改進的地圖其他地區perfornamce。

+0

LINQ實體無法識別方法 'System.Collections.Generic.List'1 [UsersOrders] ToList [UsersOrders](System.Collections.Generic.IEnumerable'1 [UsersOrders])' 方法,並且該方法不能翻譯成商店表達 – 2013-04-22 19:18:55

1

在我看來,你應該能夠保持這種簡單:

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

你試圖讓所有獲批准的用戶和用戶的訂單列表。我錯過了什麼嗎?

也u.UserOrders的名稱將取決於您如何配置你的映射。

相關問題