2010-05-30 24 views
2

我有三个表:LINQ选择M:N的用户:组

cp_user (id, name) 
cp_group (id, name) 
cp_usergroup (user_id, group_id) 
  • 经典的M:N的东西。

假设以下数据:

cp_user 
1, Paul 
2, Steven 

cp_group 
1, Admin 
2, Editor 

cp_usergroup 
1, 1 
1, 2 
2, 2 

于是保罗是管理和编辑组,而史蒂芬只是在编辑器组。我想从数据库生成一个类似的列表:

Paul Admin 
Paul Editor 
Steven Editor 

有什么建议吗?

谢谢! 克莱门斯

回答

2

我的一个朋友刚刚帮了我这个:

var q = db2.cp_users.SelectMany(
      u => u.cp_groups.Select(
       g => new { Username = u.name, Groupname = g.name })); 

工作正常,我。有没有办法在查询语法中做到这一点?

1

在查询语法:

from u in db2.cp_users 
from g in u.cp_groups 
select new { Username = u.name, GroupName = g.name } 
+0

嗯,抱歉地说,但这返回 保罗管理员 史蒂芬联系 保罗编辑 史蒂芬编辑 看来表只是交叉连接。 – blacktarmac 2010-06-01 05:43:03

+0

你是说第一个解决方案(流利的语法)返回你想要的结果,但查询表达式不? – 2010-06-02 07:35:20