【问题标题】:How to convert this query from SQL to LINQ如何将此查询从 SQL 转换为 LINQ
【发布时间】:2016-10-26 17:10:35
【问题描述】:

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

我正在处理提供 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 窗体。 谢谢

【问题讨论】:

  • 你尝试了什么?
  • 我试过这个字符串查询 = "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"; var Users = le.AspNetUsers.SqlQuery(query).ToList();
  • 但我无法显示角色名称
  • @MelyCastañeda 看起来不像 LINQ 你尝试了什么

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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}
    

    【讨论】:

      【解决方案3】:
      var Users = le.AspNetUsers.Include("AspNetUserRoles").ThenInclude("AspNetRoles").ToList();
      

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

      【讨论】:

        【解决方案4】:

        感谢@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)
                     };
        

        感谢大家的回答。 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-23
          • 2022-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多