LINQ To Entities Multiselect

时间:2013-08-23 13:47:39

标签: c# linq entity-framework

请告知,我所阅读的所有资源,书籍,视频教程都没有我认为是一个简单的常见场景。

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

我正在尝试使用Linq To Entities进行查询。我的理解是LinqToSQL即使非正式地被弃用了..

我有一个标准 一对多(桥牌表) 和决赛桌上的桥牌表多对一 最后是原始表的特定键 如果它有助于在这个混乱中有一个用户表与一个到多个用户到角色

表:   用户,(不在查询中我对where子句有这个表的特定KeyId),

角色, &安培;   RolePermission,(桥接/映射你想要的任何东西,它有角色和权限的FK)                      [不幸的是它有其他cols或者这不会那么紧张。 I.E.不是                      在实体框架中抽象实际存在],   &安培;权限。

摘要我想要为该用户的每个角色获得每个权限,用户ID可以说5 我有一个每个用户的角色列表所以(开始)我打算给这个查询提供角色ID并多次调用它,将其结果附加到列表4Ea RoleId这肯定不理想 理想的是使用UserID&单个查询中的RoleID ...

How do you do Multiple Inner Joins in Linq to Entities

上面的这个链接声称你可以通过请求所有涉及的表而不专门加入他们的PK-FK字段来解决他的问题?!​​?!?!说什么??!

这是Just Peuedo代码人员我在这种情况下打了几十次尝试

参数p_RoleId ---这个潜在版本可以理想地在UserID中传递RoleId

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子句。 两个表的例子无处不在..但是当你有一个桥牌表时,有四个人没有找到任何东西

3 个答案:

答案 0 :(得分:1)

试试这个

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

答案 1 :(得分: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();

答案 2 :(得分:0)

这是你想要的吗?

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