2011-03-26 155 views
0

我有以下的LINQ语句。我如何改变这个,所以我只在子查询中得到GroupID。 我的语法在这里不起作用。Linq to Sql的子查询

而且也只有不同的用户。

from u in Users 
join ug in UserGroups on u.UserID equals ug.UserID 
where ug.GroupID == (from igr in UserGroups where igr.UserID == 1 select igr.GroupID) 
select u 

回答

1

我会打破它成可读性两个单独的查询,但在这里不用

var group = from igr in UserGroup 
      where irg.UserID == 1 
      select igr.GroupID; 

var result = from u in Users 
       join ug in UserGroups on u.UserID equals ug.UersID 
       into x 
       where group.Contains(x.GroupID) 
       select x; 

作为一个查询,我相信它会像这样工作

var result = from u in Users 
       join ug in UserGroups on u.UserID equals ug.UersID 
       into x 
       where 
       (from igr in UserGroup 
       where irg.UserID == 1 
       select igr.GroupID).Contains(x.GroupID) 
       select x; 
1

这是怎么做的然后结束。

var query = (from u in _dbctx.Users 
    join ug in _dbctx.UserGroups on u.UserID equals ug.UserID 
    where _dbctx.UserGroups.Any(igr => igr.GroupID == ug.GroupID && igr.UserID == 1) 
    select GetUser(u)).Distinct(); 
+0

StackOverflow的使用降价的格式(见:http://daringfireball.net/projects/markdown/syntax)。像'[code] [/ code]'这样的东西在这里不起作用。 – 2012-03-07 17:30:00

0
from u in Users 
    join ug in UserGroups on u.UserID equals ug.UserID 
    where ug.GroupID == (from igr in UserGroups where igr.UserID == 1 select igr.GroupID).FirstOrDefault() 
    select u 

内查询必须恰好返回一个值