2013-08-23 245 views
0

请指教,我已阅读的所有资源,书籍,视频教程没有任何我认为是简单的常见场景。LINQ To Entities Multiselect

-----什么是通过桥接表与链接到实体-----查询的最有效和最标准的方式

我想要的查询使用LINQ到Entities.I是我的理解是LinqToSQL已被弃用,即使非正式..

我有一个标准 一对多(桥台) 和原始表 表桥多对一决赛桌 和最后一个特定的密钥如果有帮助的话,那么这个用户桌上就会有一对一的用户角色

表: 用户,(而不是在查询我有一个特定的KeyID此表的where子句),

角色, & RolePermission,(桥无论你怎么称呼它/地图,它有FK的角色&权限) [不幸的是它有其他cols或这不会如此紧张。 I.E.它不是 在实体框架中抽象出其实际存在], &权限。

摘要我希望每个用户的每个角色的权限,用户ID可以说5 我有一个每个用户的角色列表(开始)我打算提供此查询角色ID并多次调用它, ,,追加其结果列表4EA角色ID这确实不是很理想 理想的做法是利用用户ID &角色ID在单个查询...

How do you do Multiple Inner Joins in Linq to Entities

上面这个链接声称,你可以拉他要求所有表格都没有特别加入PK-FK领域?!?!?!说什么 ??!

这只是Peuedo代码乡亲,我输入了几十个在尝试这种情况下

参数p_RoleId ---这种潜在的版本可以让角色ID的每个用户ID中的理想

List<Permissions> listToReturn = new List<Permissions>(); 

var result=(from p in context.Permissions 
      from rp in m.RolePermissions 
      where m.roleID = p_RoleId    
listToReturn result.ToList(); 

我通过真的只是想知道如何正确地将这些表钩在一起并指定一些where子句。 两个表的例子随处可见。但是有四个当你有一个桥接表,我发现没有什么

+0

是的,这可能会做得很好 – ChristianProgrammer

回答

1

试试这个

var result = (from p in context.Permissions 
         join px in m.RolePermissions on p.roleID equals px.roleID 
         select p); 
+0

为什么我得到-2倒投票已?? – ChristianProgrammer

+0

@ChristianProgrammer没有任何意义,有时候他们会拒绝,因为那是他们的习惯。所以不要介意/关心太多。 –

+0

感谢这些人帮助 – ChristianProgrammer

0

这是你想要的吗?

var result=(from p in context.Permissions 
      join rp in m.RolePermissions on p.RoleId equals rp.RoleId 
      select p) 
+0

认为这是什么亨利Tshobo建议上面...我现在好,现在每个人都非常感谢 – ChristianProgrammer

1

那么你绝对可以做你在伪代码中写的东西。毕竟你所做的是暗示的加入。但它可能不是很有效。

你基本上是做一个

select <something> from Permissions , RolePermissions where permissions.id = permissionsRoles.id; 

而你并不需要一个外键。但在你的情况下,你有很多很多

//with the assumption that you have a 
//navigation property between roles and rolepermissions in your model 
var result = connection.Permissions 
          .Where(i => i.Id == RolePermissionsid)that 
          .SelectMany(i => i.RolePermissions).ToList(); 
+0

这是什么流浪'那里'那里? – ErikE