使用Linq透视多个表

本文关键字:透视 Linq 使用 | 更新日期: 2023-09-27 18:09:56

嗨,我有以下表格需要pivot以获得所需的结果。

tblUsername
userId      username
---------------------
 1          jadam
 2          janeb
 3          peterk
 4          rickd

第二个表是

tablcolumns
=============
colId     colname
-----------------
  1        Name
  2        Monday
  3        Tuesday
  4        Wednesday
  5        Thursday
  6        Friday
  7        Saturday
  8        Sunday

第三张表

tblSchedule
==================
id   userId   colId   hrs
--------------------------
1      2       3       4
2      3       7       7.5
3      1       8       2 
I am trying to write Linq statem

我想透视这些表以得到回复,如

Name  Monday  Tuesday  Wednesday Thursday Friday Saturday Sunday 
jadam   2
janeb           4
peterk                                            7.5
rickd

我尝试使用Linq连接,但它没有工作,我相信它需要分组,我不太熟悉它。由于

使用Linq透视多个表

LINQ中没有内置的枢轴功能。我认为您可以编写一个程序来动态创建选择—但是,它可能不会太有效。无论如何,对于这种情况,由于每周的天数不会改变,您可以这样做:

var query = tblUsername.Select(u => new {
    Name = u.username,
    Monday = u.tblSchedule.Where(sch => sch.colId == 2).Sum(sch => sch.hrs),
    Tuesday = u.tblSchedule.Where(sch => sch.colId == 3).Sum(sch => sch.hrs),
    Wednesday = u.tblSchedule.Where(sch => sch.colId == 4).Sum(sch => sch.hrs),
    Thursday = u.tblSchedule.Where(sch => sch.colId == 5).Sum(sch => sch.hrs),
    Friday = u.tblSchedule.Where(sch => sch.colId == 6).Sum(sch => sch.hrs),
    Saturday = u.tblSchedule.Where(sch => sch.colId == 7).Sum(sch => sch.hrs),
    Sunday = u.tblSchedule.Where(sch => sch.colId == 8).Sum(sch => sch.hrs),
});