如何将此查询从SQL转换为LINQ

时间:2016-10-26 17:10:36

标签: c# asp.net sql-server entity-framework linq

我正在进行查询以获取分配给每个用户的角色并将其显示在表格上。实体是(对不起图片):

enter image description here

我正在处理提供Identity .net的数据库结构。 SQL查询如下:

SELECT AspNetUsers.Id, AspNetUsers.UserName, AspNetRoles.Name
FROM AspNetUsers
INNER JOIN 
(AspNetRoles INNER JOIN AspNetUserRoles 
ON AspNetRoles.Id LIKE AspNetUserRoles.RoleId)
ON AspNetUsers.Id LIKE AspNetUserRoles.UserId

我想在LINQ中转换该查询,或者有人知道以其他方式获取用户在表中显示的角色? 我在Asp.NET Web Forms工作。 感谢

4 个答案:

答案 0 :(得分:2)

您可以尝试使用此工具:http://www.sqltolinq.com/

答案 1 :(得分:1)

如果外键设置正确,您可以这样做:

var result = from u in AspNetUsers select new 
                {
                   Id = u.Id, UserName = u. UserName,
                   Roles = u.AspNetUserRoles.Select(r=>r.Name)
                }

你会有一个更清洁的结构,如

          {Id, UserName, IEnumerable<string>Roles}

答案 2 :(得分:0)

var Users = le.AspNetUsers.Include("AspNetUserRoles").ThenInclude("AspNetRoles").ToList();

aspnet用户可以分配多个角色。您可以使用linq Select方法获取特定属性并将其映射到新对象。
http://www.dotnetlearners.com/linq/linq-to-sql-writing-select-query.aspx

答案 3 :(得分:0)

谢谢@ad-net,你的回答帮我检查了我的外键。正确的查询是:

var result = from u in le.AspNetUsers
             select new
             {
                 Id = u.Id,
                 UserName = u.UserName,
                 Correo = u.Email,
                 Roles = u.AspNetRoles.Select(r => r.Name)
             };

感谢大家的回答。 :)