Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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# 具有LINQ连接的SQL查询_C#_Linq_Entity Framework_Tsql_Linq To Entities - Fatal编程技术网

C# 具有LINQ连接的SQL查询

C# 具有LINQ连接的SQL查询,c#,linq,entity-framework,tsql,linq-to-entities,C#,Linq,Entity Framework,Tsql,Linq To Entities,我无法将以下查询转换为Linq: SELECT u.UserId, u.UserName, r.RoleName FROM aspnet_users u INNER JOIN aspnet_UsersInRoles ur ON u.UserId = ur.UserId INNER JOIN aspnet_Roles r ON r.RoleId = ur.RoleId AND

我无法将以下查询转换为Linq:

SELECT u.UserId, 
       u.UserName, 
       r.RoleName 
FROM   aspnet_users u 
       INNER JOIN aspnet_UsersInRoles ur ON u.UserId = ur.UserId 
       INNER JOIN aspnet_Roles r ON r.RoleId = ur.RoleId AND 
                                    r.RoleName IN ('SuperAdmin', 'AdminExtended', 'ExpertExtended') 
ORDER  BY u.UserName 
我尝试了几个Linq查询,但我不确定如何构建角色-用户关系,以便从每个用户获取角色,EF使用aspnet_UsersInRoles表在他们之间创建映射

以下是我尝试过的:

var query = from u in context.aspnet_Users
            from r in u.aspnet_Roles
            where r.RoleName == "SuperAdmin" || r.RoleName == "AdminExtended" || r.RoleName == "ExpertExtended"
            select u;

尝试以下方法:

var roleNames = new List<string>(){"SuperAdmin","AdminExtended","ExpertExtended"};
from u in context.aspnet_Users
join uir in context.aspnet_UsersInRoles on u.UserId = uir.UserId
join r in context.aspnet_Roles on r.RoleId = uir.RoleId
where (roleNames.Contains(r.RoleName))
select new {UserId = u.UserId, UserName = u.UserName , RoleName = r.RoleName}
from r in context.Roles
where r.RoleName == "SuperAdmin" || r.RoleName == "AdminExtended" || r.RoleName == "ExpertExtended"
from u in r.Users
orderby u.UserName
select new {u.UserId, u.UserName, r.RoleName};
var roleNames=new List(){“超级管理员”、“管理员扩展”、“专家扩展”};
来自context.aspnet\u用户中的u
在context.aspnet_UsersInRoles on u.UserId=uir.UserId中加入uir
在r.RoleId=uir.RoleId上的context.aspnet_角色中加入r
其中(RoleName.Contains(r.RoleName))
选择新{UserId=u.UserId,UserName=u.UserName,RoleName=r.RoleName}
您可以在msdn文档中查看有关linq join查询的更多详细信息。

请尝试以下操作:

var roleNames = new List<string>(){"SuperAdmin","AdminExtended","ExpertExtended"};
from u in context.aspnet_Users
join uir in context.aspnet_UsersInRoles on u.UserId = uir.UserId
join r in context.aspnet_Roles on r.RoleId = uir.RoleId
where (roleNames.Contains(r.RoleName))
select new {UserId = u.UserId, UserName = u.UserName , RoleName = r.RoleName}
from r in context.Roles
where r.RoleName == "SuperAdmin" || r.RoleName == "AdminExtended" || r.RoleName == "ExpertExtended"
from u in r.Users
orderby u.UserName
select new {u.UserId, u.UserName, r.RoleName};
var roleNames=new List(){“超级管理员”、“管理员扩展”、“专家扩展”};
来自context.aspnet\u用户中的u
在context.aspnet_UsersInRoles on u.UserId=uir.UserId中加入uir
在r.RoleId=uir.RoleId上的context.aspnet_角色中加入r
其中(RoleName.Contains(r.RoleName))
选择新{UserId=u.UserId,UserName=u.UserName,RoleName=r.RoleName}
您可以在msdn文档中查看有关linq join查询的更多详细信息。

请尝试以下操作:

var roleNames = new List<string>(){"SuperAdmin","AdminExtended","ExpertExtended"};
from u in context.aspnet_Users
join uir in context.aspnet_UsersInRoles on u.UserId = uir.UserId
join r in context.aspnet_Roles on r.RoleId = uir.RoleId
where (roleNames.Contains(r.RoleName))
select new {UserId = u.UserId, UserName = u.UserName , RoleName = r.RoleName}
from r in context.Roles
where r.RoleName == "SuperAdmin" || r.RoleName == "AdminExtended" || r.RoleName == "ExpertExtended"
from u in r.Users
orderby u.UserName
select new {u.UserId, u.UserName, r.RoleName};
var roleNames=new List(){“超级管理员”、“管理员扩展”、“专家扩展”};
来自context.aspnet\u用户中的u
在context.aspnet_UsersInRoles on u.UserId=uir.UserId中加入uir
在r.RoleId=uir.RoleId上的context.aspnet_角色中加入r
其中(RoleName.Contains(r.RoleName))
选择新{UserId=u.UserId,UserName=u.UserName,RoleName=r.RoleName}
您可以在msdn文档中查看有关linq join查询的更多详细信息。

请尝试以下操作:

var roleNames = new List<string>(){"SuperAdmin","AdminExtended","ExpertExtended"};
from u in context.aspnet_Users
join uir in context.aspnet_UsersInRoles on u.UserId = uir.UserId
join r in context.aspnet_Roles on r.RoleId = uir.RoleId
where (roleNames.Contains(r.RoleName))
select new {UserId = u.UserId, UserName = u.UserName , RoleName = r.RoleName}
from r in context.Roles
where r.RoleName == "SuperAdmin" || r.RoleName == "AdminExtended" || r.RoleName == "ExpertExtended"
from u in r.Users
orderby u.UserName
select new {u.UserId, u.UserName, r.RoleName};
var roleNames=new List(){“超级管理员”、“管理员扩展”、“专家扩展”};
来自context.aspnet\u用户中的u
在context.aspnet_UsersInRoles on u.UserId=uir.UserId中加入uir
在r.RoleId=uir.RoleId上的context.aspnet_角色中加入r
其中(RoleName.Contains(r.RoleName))
选择新{UserId=u.UserId,UserName=u.UserName,RoleName=r.RoleName}

您可以在msdn文档中查看有关linq join查询的更多详细信息。

与Jenish相同,但如果角色是用户的导航属性,则可以避免加入

from u in context.aspnet_Users
join r in context.aspnet_UsersInRoles  on u.UserId equals r.UserId
select new {u.UserName, r.aspnet_Role.RoleName}
Nav属性
aspnet\u角色
可能具有不同的名称IDK

您可以在第一次尝试时选择关闭的位置:

from u in context.aspnet_Users
from r in context.aspnet_UsersInRoles
where u.UserId == r.UserId
select new {u.UserName, r.aspnet_Role.RoleName}

与Jenish相同,但如果角色是用户的导航属性,则可以避免加入

from u in context.aspnet_Users
join r in context.aspnet_UsersInRoles  on u.UserId equals r.UserId
select new {u.UserName, r.aspnet_Role.RoleName}
Nav属性
aspnet\u角色
可能具有不同的名称IDK

您可以在第一次尝试时选择关闭的位置:

from u in context.aspnet_Users
from r in context.aspnet_UsersInRoles
where u.UserId == r.UserId
select new {u.UserName, r.aspnet_Role.RoleName}

与Jenish相同,但如果角色是用户的导航属性,则可以避免加入

from u in context.aspnet_Users
join r in context.aspnet_UsersInRoles  on u.UserId equals r.UserId
select new {u.UserName, r.aspnet_Role.RoleName}
Nav属性
aspnet\u角色
可能具有不同的名称IDK

您可以在第一次尝试时选择关闭的位置:

from u in context.aspnet_Users
from r in context.aspnet_UsersInRoles
where u.UserId == r.UserId
select new {u.UserName, r.aspnet_Role.RoleName}

与Jenish相同,但如果角色是用户的导航属性,则可以避免加入

from u in context.aspnet_Users
join r in context.aspnet_UsersInRoles  on u.UserId equals r.UserId
select new {u.UserName, r.aspnet_Role.RoleName}
Nav属性
aspnet\u角色
可能具有不同的名称IDK

您可以在第一次尝试时选择关闭的位置:

from u in context.aspnet_Users
from r in context.aspnet_UsersInRoles
where u.UserId == r.UserId
select new {u.UserName, r.aspnet_Role.RoleName}

根据EF生成的联接表
aspnet\u UsersInRoles
和您在所需的生成的SQL查询中提到的一些字段名,我假设POCO与以下类似(此答案的其余部分取决于这些假设):

请注意,EF和L2E为您带来了所有的魔力:它甚至可以从关系名称推断出两个POCO之间的关系

仅使用上面的代码,我将其放入编译器中,将
var q
设置为与所示查询相等,并将
q.ToString()
转储出去-这就是我得到的:

SELECT
    [Extent1].[RoleId] AS [RoleId],
    [Join1].[UserId] AS [UserId],
    [Join1].[UserName] AS [UserName],
    [Extent1].[RoleName] AS [RoleName]
    FROM  [dbo].[Roles] AS [Extent1]
    INNER JOIN  (SELECT [Extent2].[Role_RoleId] AS [Role_RoleId], [Extent3].[UserId] AS [UserId], [Extent3].[UserName] AS [UserName]
        FROM  [dbo].[UserRoles] AS [Extent2]
        INNER JOIN [dbo].[Users] AS [Extent3] ON [Extent3].[UserId] = [Extent2].[User_UserId] ) AS [Join1] ON [Extent1].[RoleId] = [Join1].Role_RoleId]
    WHERE [Extent1].[RoleName] IN (N'SuperAdmin',N'AdminExtended',N'ExpertExtended')
    ORDER BY [Join1].[UserName] ASC

我认为这很好地说明了这一点。

基于EF生成的联接表
aspnet\u UsersInRoles
和您在所需的生成的SQL查询中提到的一些字段名,我假设POCO与以下类似(此答案的其余部分取决于这些假设):

请注意,EF和L2E为您带来了所有的魔力:它甚至可以从关系名称推断出两个POCO之间的关系

仅使用上面的代码,我将其放入编译器中,将
var q
设置为与所示查询相等,并将
q.ToString()
转储出去-这就是我得到的:

SELECT
    [Extent1].[RoleId] AS [RoleId],
    [Join1].[UserId] AS [UserId],
    [Join1].[UserName] AS [UserName],
    [Extent1].[RoleName] AS [RoleName]
    FROM  [dbo].[Roles] AS [Extent1]
    INNER JOIN  (SELECT [Extent2].[Role_RoleId] AS [Role_RoleId], [Extent3].[UserId] AS [UserId], [Extent3].[UserName] AS [UserName]
        FROM  [dbo].[UserRoles] AS [Extent2]
        INNER JOIN [dbo].[Users] AS [Extent3] ON [Extent3].[UserId] = [Extent2].[User_UserId] ) AS [Join1] ON [Extent1].[RoleId] = [Join1].Role_RoleId]
    WHERE [Extent1].[RoleName] IN (N'SuperAdmin',N'AdminExtended',N'ExpertExtended')
    ORDER BY [Join1].[UserName] ASC

我认为这很好地说明了这一点。

基于EF生成的联接表
aspnet\u UsersInRoles
和您在所需的生成的SQL查询中提到的一些字段名,我假设POCO与以下类似(此答案的其余部分取决于这些假设):

请注意,EF和L2E为您带来了所有的魔力:它甚至可以从关系名称推断出两个POCO之间的关系

仅使用上面的代码,我将其放入编译器中,将
var q
设置为与所示查询相等,并将
q.ToString()
转储出去-这就是我得到的:

SELECT
    [Extent1].[RoleId] AS [RoleId],
    [Join1].[UserId] AS [UserId],
    [Join1].[UserName] AS [UserName],
    [Extent1].[RoleName] AS [RoleName]
    FROM  [dbo].[Roles] AS [Extent1]
    INNER JOIN  (SELECT [Extent2].[Role_RoleId] AS [Role_RoleId], [Extent3].[UserId] AS [UserId], [Extent3].[UserName] AS [UserName]
        FROM  [dbo].[UserRoles] AS [Extent2]
        INNER JOIN [dbo].[Users] AS [Extent3] ON [Extent3].[UserId] = [Extent2].[User_UserId] ) AS [Join1] ON [Extent1].[RoleId] = [Join1].Role_RoleId]
    WHERE [Extent1].[RoleName] IN (N'SuperAdmin',N'AdminExtended',N'ExpertExtended')
    ORDER BY [Join1].[UserName] ASC

我认为这很好地说明了这一点。

基于EF生成的联接表
aspnet\u UsersInRoles
和您在所需的生成的SQL查询中提到的一些字段名,我假设POCO与以下类似(此答案的其余部分取决于这些假设):

请注意,EF和L2E为您带来了所有的魔力:它甚至可以从关系名称推断出两个POCO之间的关系

仅使用上面的代码,我将其放入编译器中,将
var q
设置为与所示查询相等,并将
q.ToString()
转储出去-这就是我得到的:

SELECT
    [Extent1].[RoleId] AS [RoleId],
    [Join1].[UserId] AS [UserId],
    [Join1].[UserName] AS [UserName],
    [Extent1].[RoleName] AS [RoleName]
    FROM  [dbo].[Roles] AS [Extent1]
    INNER JOIN  (SELECT [Extent2].[Role_RoleId] AS [Role_RoleId], [Extent3].[UserId] AS [UserId], [Extent3].[UserName] AS [UserName]
        FROM  [dbo].[UserRoles] AS [Extent2]
        INNER JOIN [dbo].[Users] AS [Extent3] ON [Extent3].[UserId] = [Extent2].[User_UserId] ) AS [Join1] ON [Extent1].[RoleId] = [Join1].Role_RoleId]
    WHERE [Extent1].[RoleName] IN (N'SuperAdmin',N'AdminExtended',N'ExpertExtended')
    ORDER BY [Join1].[UserName] ASC

我认为这很好地抓住了它。

您可以使用
string[]
Contains()
来模拟
中的x()
行为。@abatishchev是的,您是正确的。这使代码看起来更好。更新了我的答案。您可以使用
string[]
Contains()
模拟
中的x()
行为。@abatishchev是的,您是正确的。这使代码看起来更好。更新了我的答案。您可以使用
string[]
Contains()
来模拟