2012-01-27 200 views
-2

我有這個數據庫圖,並希望進行查詢來查找給定區域中的所有用戶列表。提供RegionId。複雜的Linq集合查詢

DB Diagram

這樣我就可以通過這個代碼,讓所有的部門(可能不是最好的辦法。):

var region = context.Regions.Find(regionId); 
IEnumerable<Department> departments = region.Areas 
      .SelectMany(a => a.Workplaces) 
      .SelectMany(w => w.Departments); 

帳戶可以有很多用戶列表,和賬戶可以鏈接到很多部門。有人可以制定一個查詢來實現這個請嗎?

+0

我剛纔已經意識到這種模式是搞砸了。部門> - <帳戶應該是多對多的......這個數據庫圖是無用的:-( – Simon 2012-01-27 22:35:14

+0

圖現在是正確的... grr @ downvoters :(今天晚些時候將在下面嘗試答案,並會盡快回復。 – Simon 2012-01-29 12:56:42

回答

-1

您可以使用let語法(或.Select方法)來導航ManyToOne關係。

var query = 
    from r in context.Regions 
    where r.RegionId == regionId 
    from a in r.Areas 
    from w in a.Workplaces 
    from d in w.Departments 
    from da in d.DepartmentAccounts 
    let acc = da.Account 
    from u in acc.UserLists 
    select u; 


var query2 = context.Regions.Where(r => r.RegionId == regionId) 
    .SelectMany(r => r.Areas) 
    .SelectMany(a => a.Workplaces) 
    .SelectMany(w => w.Departments) 
    .SelectMany(d => d.DepartmentAccounts) 
    .Select(da => da.Account) 
    .SelectMany(acc => acc.UserLists); 
+0

他只是想要用戶名單 – 2012-01-27 21:27:37

+0

@Saeed我不認爲你是一個很好的判斷他的想法 – 2012-01-27 21:33:10

+0

OP是判斷:「我有這個數據庫圖,想要查詢查找給定區域中的所有UserLists」 – 2012-01-27 21:34:26

0

的完整性最終代碼爲:

 List<UserList> query2 = context.Regions.Where(r => r.RegionId == regionId) 
      .SelectMany(r => r.Areas) 
      .SelectMany(a => a.Workplaces) 
      .SelectMany(w => w.Departments) 
      .SelectMany(d => d.AccountsAllowedToPost) 
      .Distinct() 
      .SelectMany(da => da.Lists).ToList();