如何使用C#通过LINQ建立数据透视表(How to build pivot table throu

2019-07-18 14:55发布

我有这个数据表在我的C#代码:

Date     | Employee | Job1 | Job2 |  Job3 |
---------|----------|------|------|-------|
1/1/2012 | A        | 1.00 | 1    |  1    |
1/1/2012 | B        | 2.5  | 2    |  2    |
1/1/2012 | C        | 2.89 | 1    |  4    |
1/1/2012 | D        | 4.11 | 2    |  1    |
1/2/2012 | A        | 3    | 2    |  5    |
1/2/2012 | B        | 2    | 2    |  2    |
1/2/2012 | C        | 3    | 3    |  3    |
1/2/2012 | D        | 1    | 1    |  1    |
1/3/2012 | A        | 5    | 5    |  5    |
1/3/2012 | B        | 2    | 2    |  6    |
1/3/2012 | C        | 1    | 1    |  1    |
1/3/2012 | D        | 2    | 3    |  4    |
2/1/2012 | A        | 2    | 2    |  2    |
2/1/2012 | B        | 5    | 5    |  2    |
2/1/2012 | D        | 2    | 2    |  2    |
2/2/2012 | A        | 3    | 3    |  3    |
2/2/2012 | B        | 2    | 3    |  3    |
3/1/2012 | A        | 4    | 4    |  2    |

现在我想创建另一个数据表这将是这样的:

Job1    
Employee | 1/1/2012 | 1/2/2012 | 1/3/2012 | 2/1/2012 | 2/2/2012 |
---------|----------|----------|----------|----------|----------|
A        | 1.00     | 3        | 5        | 2        | 3        |
B        | 2.50     | 2        | 2        | 5        | 2        |
C        | 2.89     | 3        | 1        | -        |          |
D        | 4.11     | 1        | 2        | 2        |          |
Total    | 10.50    | 9        | 10       | 9        | 5        |

请建议如何使用LINQ和C#,使这个数据透视表。

Answer 1:

var query = from foo in db.Foos
            group foo by foo.Date into g
            select new {
                Date = g.Key,
                A = g.Where(x => x.Employee == "A").Sum(x => x.Job1),
                B = g.Where(x => x.Employee == "B").Sum(x => x.Job1),
                C = g.Where(x => x.Employee == "C").Sum(x => x.Job1),
                D = g.Where(x => x.Employee == "D").Sum(x => x.Job1),
                Total = g.Sum(x => x.Job1)
            };

您还可以应用OrderBy(x => x.Date)查询。



Answer 2:

您将无法使用LINQ做到这一点,由于列的动态特性。 LINQ to SQL中需要一个静态的方式来映射结果集字段属性值。 相反,你可以看看到PIVOT SQL语句,并将结果填入一个DataTable

http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx



文章来源: How to build pivot table through linq using c#
标签: linq pivot