【问题标题】:How to create a Stuff and XML PATH(SQL) in Linq or Lambda如何在 Linq 或 Lambda 中创建 Stuff 和 XML PATH(SQL)
【发布时间】:2018-06-02 23:22:25
【问题描述】:

如何在 Linq 或 lambda 中创建等效代码?

我在 Asp.net Core 2 上使用 Entity Framework Core。

SELECT 
    (SELECT 
         STUFF((SELECT DISTINCT ', ' + Roles.Name
                FROM AspNetUsers Users
                INNER JOIN AspNetUserRoles UserRoles ON UserRoles.UserId = Users.Id
                INNER JOIN AspNetRoles Roles ON Roles.Id = UserRoles.RoleId
                WHERE AspNetUsers.Id = UserRoles.UserId
                FOR XML PATH('')), 1, 2, '')) AS 'Roles', 
    AspNetUsers.*                    
FROM 
    AspNetUsers AspNetUsers

【问题讨论】:

    标签: c# sql-server linq lambda entity-framework-core


    【解决方案1】:

    我会有一个看起来像这样的查询。如果您分析查询,您会注意到 STUFF ... FOR XML PATH 部分是由 .NET 而不是 SQL 在内存中计算的。

    var test = (
        from u in ctx.Users
        join ur in ctx.UserRoles on u.Id equals ur.UserId
        join r in ctx.Roles on ur.RoleId equals r.Id
        group r by u into g
        select new { User = g.Key, Roles = string.Join(",", g.Select(y => y.Name)) }
               );
    

    旁注 使用将用户作为对象的查询要容易得多,而不是扩展其所有属性

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 1970-01-01
      • 2015-07-14
      • 2012-12-16
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2018-07-29
      相关资源
      最近更新 更多