2017-02-10 2 views
0

У меня есть данные в переменной «Результат», как показано нижепреобразование данных строки по столбцам в Linq

StaffName ProjectName Month  Weeks 
Venkat  Project1  January 4 
Venkat  Project1  February 2 
Venkat  Project2  January 3 
Kumar  Project1  March  5 
Kumar  Project4  December 3 

Теперь я хочу вывода, как показано ниже

StaffName ProjectName Jan Feb Mar Dec Total 
Venkat  Project1  4  2    6 
Venkat  Project2  3      3 
Kumar  Project1     5   5 
Kumar  Project4      3  3 

Пожалуйста, помогите мне, если у вас есть какие-либо идеи

+0

См: http://stackoverflow.com/questions/167304/is-it-possible-to-pivot-data-using-linq – Magnus

ответ

1

Я думаю, что вы хотите сделать это динамически, но нет простого способа.

Так что просто используйте GroupBy, Luke. как это:

var res = data.GroupBy(x => new { x.StaffName, x.ProjectName }) 
    .Select(x => new 
    { 
     StaffName = x.Key.StaffName, 
     ProjectName = x.Key.ProjectName, 
     Jan = x.Where(y => y.Month == "January").Sum(y => y.Weeks), 
     Feb = x.Where(y => y.Month == "February").Sum(y => y.Weeks), 
     Mar = x.Where(y => y.Month == "March").Sum(y => y.Weeks), 
     Dec = x.Where(y => y.Month == "December").Sum(y => y.Weeks), 
     //Add more month here 
     Total = x.Sum(y => y.Weeks) 
    }); 

Вот fiddle

+0

Спасибо за Ответ. Он работает, но я хочу отображать только те месяцы, которые доступны в переменной «Результат». Если переменная Result содержит все месяцы, которые должны отображать все месяцы, или если моя переменная Result содержит (например: Jan и Feb), она должна отображать только те два месяца. – user2377494

+1

@ user2377494 Думаю, вам лучше обрабатывать данные за каждый месяц и показывать только то, что вы хотите. C# работает лучше всего, когда все свойства объекта известны заранее (фактически, большую часть времени это единственный вариант, кроме случаев, когда вы используете 'dynamic'). – Kroltan

Смежные вопросы