Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF查询-SQL";在“中”同一张桌子_C#_Entity Framework_Linq To Sql - Fatal编程技术网

C# EF查询-SQL";在“中”同一张桌子

C# EF查询-SQL";在“中”同一张桌子,c#,entity-framework,linq-to-sql,C#,Entity Framework,Linq To Sql,我需要获取与组织有关系的用户列表,但前提是当前用户与同一组织有关系 换句话说,如果当前用户与相关组织没有关系,则不会返回任何结果。如果存在关系,则返回结果。这是我现在的查询,但它只检索当前用户中的一个用户 下面的查询显然将获取所有活动的UserOrganization记录,其中OrganizationId与传递给查询的值匹配。所以我的问题是,在返回他们不应该看到的记录之前,我如何知道使用我的当前用户(UserId)并确保它们存在于这个结果集中 var dbUsers = db.UserOrgan

我需要获取与
组织
有关系的
用户列表,但前提是当前用户与同一
组织
有关系

换句话说,如果当前用户与相关组织没有关系,则不会返回任何结果。如果存在关系,则返回结果。这是我现在的查询,但它只检索当前用户中的一个用户

下面的查询显然将获取所有活动的
UserOrganization
记录,其中
OrganizationId
与传递给查询的值匹配。所以我的问题是,在返回他们不应该看到的记录之前,我如何知道使用我的当前用户(
UserId
)并确保它们存在于这个结果集中

var dbUsers = db.UserOrganizations
                    .Where(u => u.OrganizationId == organizationId)
                    .WhereIf(active, u => u.IsActive)

最简单的方法就是检查当前用户是否有这种关系,然后决定是否继续。这样就不必执行可能非常昂贵的数据库操作:

var hasRelationship = db.UserOrganisations.Any(uo => 
                          uo.UserId == currentUserId && 
                          uo.OrganizationId == organizationId);

if(hasRelationship) 
{
    //Interesting stuff here
}
else 
{
    //No access
}
如果您无法通过
组织查看
用户
,可以执行以下操作:

var dbUsers = db.Organizations
                    .Where(o => o.OrganizationId == organizationId
&& o.UserOrganizations.Any(u=>u.User.UserId == currentUserId && u.User.IsActive))
                    .SelectMany(o=>o.UserOrganizations)
                    .Select(uo=>uo.User)
var dbUsers = db.Organizations
                    .Where(o => o.OrganizationId == organizationId
&& o.UserOrganizations.Any(u=>u.User.UserId == currentUserId && u.User.IsActive))
                    .SelectMany(o=>o.UserOrganizations)
                    .Select(uo=>uo.User)