2010-11-12 205 views
1

我有以下LINQ查詢LINQ where子句

var ret = from u in MenuHeaders 
    .Include("MenuHeaderItems.MenuItem")     
    select u; 

我需要選擇存在一定的用戶,這屬於給用戶ID一定的作用ONLY菜單標題。

因此,關係路徑將是這樣的......

MenuHeader RoleMenuHeaders Roles  UserRoles Users 
---------- --------------- -----  --------- ----- 
ID  <---MenuHeaderID |-> ID <---| UserID----->ID 
       RoleID -------|   |-- RoleID 

我如何獲得我上面的查詢只返回MenuHeaders其中UserID = 1?

回答

1

如果您使用的是LINQ to Entities,則可能通過屬性自動映射此關係,並且(假設這些關係是多對多關係,因爲它們似乎在您所顯示的模式中),您可以利用任何運營商:

var ret = from mh in MenuHeaders.Include("MenuHeaderItems.MenuItem")  
    where mh.Roles.Any(r => r.Users.Any(u => u.UserId == 1)) 
    select mh; 
+0

'.Include()'是一個Linq-to-Entities方法,所以這看起來正確 – 2010-11-12 23:14:03

+0

夥計。我擊敗了Jon Skeet。我已經達到涅ana。 ;-) – StriplingWarrior 2010-11-16 22:12:10

0

嗯,你可以用它做一個連接:

var ret = from mh in MenuHeaders.Include("MenuHeaderItems.MenuItem") 
      join ur in UserRoles on mh.RoleID equals u.RoleID 
      where ur.UserID == 1 
      select mh; 

(我不知道你是否需要Include("UserRoles.UserRole")或類似的東西,我不知道你使用的LINQ提供程序。)