【问题标题】:Pivot and Unpivot in LINQ CoreLINQ Core 中的 Pivot 和 Unpivot
【发布时间】:2019-09-25 21:09:39
【问题描述】:

我是 LINQ 核心的新手。我想在 LINQ Core 中编写一个查询,以便在表上执行 PIVOT 和 UNPIVOT。我已经为它编写了 SQL 查询,但在转换为 LINQ 查询时需要帮助。我搜索了几篇文章,但没有帮助。

下面是我需要转换为 LINQ 查询的 PIVOT 和 UNPIVOT 的 SQL 查询:

SELECT ResourceName,
            max(ENText)as ENText,
            max(FRText)as FRText,
            max(ZHText)as ZHText,
            max(DEText)as DEText,
            max(ITText)as ITText,
            max(JAText)as JAText,
            max(PTText)as PTText,
            max([PT-BRText]) as [PT-BRText],
            max(RUText) as RUText,
            max(ESText) as ESText,
            max(SVText) as SVText into #temp FROM   
GenericLanguageTranslation 
PIVOT  
(  
max(Translation) FOR LanguageID IN (
            ENText,
            ZHText,
            FRText,
            DEText,
            ITText,
            JAText,
            PTText,
            [PT-BRText],
            RUText,
            ESText,
            SVText)
) AS Tab2  
group by ResourceName
order by 1


SELECT NEWID() as Id,ResourceName, [LanguageID],[Translation]-- into #GenericLanguageTranslation
FROM #temp
UNPIVOT
(
       [Translation]
       FOR [LanguageID] IN 
       (
            ENText,
            ZHText,
            FRText,
            DEText,
            ITText,
            JAText,
            PTText,
            [PT-BRText],
            RUText,
            ESText,
            SVText

       )
) AS UnpivotTranslation

有人可以帮我吗?

【问题讨论】:

    标签: linq sql-server-2017 sql-to-linq-conversion dynamic-linq-core


    【解决方案1】:

    我可以使用下面的 LINQ 获取上述查询的 PIVOT:

    var languageTranslation = await _genericlanguageTranslationService.GetAllLanguageTranslation();
                var query = languageTranslation.GroupBy(c => c.ResourceName)
                    .Select((g, i) => new
                    {
                        ResourceName = g.Key,
                        RowNumber = i + 1,
                            ENText = g.Where(c => c.LanguageId == "ENText").Max(c => c.Translation),
                            FRText = g.Where(c => c.LanguageId == "FRText").Max(c => c.Translation),
                            ZHText = g.Where(c => c.LanguageId == "ZHText").Max(c => c.Translation),
                            DEText = g.Where(c => c.LanguageId == "DEText").Max(c => c.Translation),
                            ITText = g.Where(c => c.LanguageId == "ITText").Max(c => c.Translation),
                            JAText = g.Where(c => c.LanguageId == "JAText").Max(c => c.Translation),
                            PTText = g.Where(c => c.LanguageId == "PTText").Max(c => c.Translation),
                            PT_BRText = g.Where(c => c.LanguageId == "PT-BRText").Max(c => c.Translation),
                            RUText = g.Where(c => c.LanguageId == "RUText").Max(c => c.Translation),
                            ESText = g.Where(c => c.LanguageId == "ESText").Max(c => c.Translation),
                            SVText = g.Where(c => c.LanguageId == "SVText").Max(c => c.Translation)
                        })
                        .AsEnumerable()
                        .OrderBy(x => x.ResourceName);
    

    但我还需要找到一种方法来 UNPIVOT。

    【讨论】:

      猜你喜欢
      • 2016-02-21
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      相关资源
      最近更新 更多