Pivot и Unpivot в ядре LINQ - PullRequest
       33

Pivot и Unpivot в ядре LINQ

0 голосов
/ 08 мая 2019

Я новичок в ядре LINQ.Я хочу написать запрос в LINQ Core для выполнения PIVOT и UNPIVOT для таблицы.Я написал SQL-запрос для этого, но мне нужна помощь в преобразовании в запрос LINQ.Я искал несколько статей, но это не помогло.

Ниже приведен мой SQL-запрос для PIVOT и UNPIVOT, который мне нужно преобразовать в LINQ Query:

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

Может ли кто-нибудь помочь мне в этом

1 Ответ

0 голосов
/ 08 мая 2019

Я могу получить PIVOT для вышеуказанного запроса, используя ниже LINQ:

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.

...