0

我是 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

任何人都可以帮助我吗?

4

1 回答 1

0

我可以使用以下 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。

于 2019-05-08T09:27:08.233 回答