如何获取实体框架连接表的计数

时间:2015-12-01 21:57:13

标签: c# entity-framework linq

我有两个简单的表,UsersRoles。两者都有自己的主键ID以及一些与此问题无关的其他独特属性。两个表都具有另一个的virtual IList属性。所以User对象作为以下属性:

public virtual IList<Role> Roles { get; set; }

Role对象具有以下属性:

public virtual IList<User> Users { get; set; }

两者都允许我在C#中轻松地从User导航到Role s或从Role导航到User

EntityTypeConfiguration的{​​{1}}没有Role特有的内容。但是,User具有以下User来创建Junction表:

Role

到目前为止,这完全符合我需要做的一切。现在,我需要一种方法来查询 this.HasMany(x => x.Roles) .WithMany(x => x.Users) .Map(x => { x.ToTable("UserRole", "xref"); x.MapLeftKey("UserID"); x.MapRightKey("RoleID"); }); 表中的记录总数。在SQL中,我只需执行以下操作:

xref.UserRole

生活将是完美的。但EF采用Junction表并将其置于幕后。我无法做出类似的事情:

SELECT COUNT(*) FROM xref.UserRole

我已经遍布这里和网络,并没有找到任何特定于这样的简单Junction表的东西。其他答案有额外的字段或不是真正的多对多连接,所以它不适用于我的情况。

有没有办法,在DbContext上有一些扩展方法或更深的属性来到那个表,所以我可以在Linq查询中使用它?我知道我可以写一个存储过程,但这看起来有点像kluge。

1 个答案:

答案 0 :(得分:3)

  

我需要一种方法来查询xref.UserRole

中的记录总数

所以真正寻找的是分配给所有用户的角色总数。这可以计算为:

db.Users.Sum(u => u.Roles.Count());

虽然如果真的被翻译为

,我会感到惊讶
SELECT COUNT(*) FROM xref.UserRole

如果您想运行那个确切的查询,您可以随时使用SqlQuery