如何使用c通过linq构建数据透视表#

如何使用c通过linq构建数据透视表#,linq,pivot,Linq,Pivot,我的c代码中有这个数据表: 日期|员工|工作1 |工作2 |工作3| ---------|----------|------|------|-------| 2012年1月1日| A | 1.00 | 1 | 1| 2012年1月1日| B | 2.5 | 2 | 2| 2012年1月1日| C | 2.89 | 1 | 4| 2012年1月1日| D | 4.11 | 2 | 1| 2012年1月2日| A | 3 | 2 | 5| 2012年1月2日| B | 2 | 2 | 2| 2012

我的c代码中有这个数据表:

日期|员工|工作1 |工作2 |工作3|
---------|----------|------|------|-------|
2012年1月1日| A | 1.00 | 1 | 1|
2012年1月1日| B | 2.5 | 2 | 2|
2012年1月1日| C | 2.89 | 1 | 4|
2012年1月1日| D | 4.11 | 2 | 1|
2012年1月2日| A | 3 | 2 | 5|
2012年1月2日| B | 2 | 2 | 2|
2012年1月2日| C | 3 | 3 | 3|
2012年1月2日| D | 1 | 1 | 1|
2012年1月3日| A | 5 | 5 | 5|
2012年1月3日| B | 2 | 2 | 6|
2012年1月3日| C | 1 | 1 | 1|
2012年1月3日| D | 2 | 3 | 4|
2012年2月1日| A | 2 | 2 | 2|
2012年2月1日| B | 5 | 5 | 2|
2012年2月1日| D | 2 | 2 | 2|
2012年2月2日| A | 3 | 3 | 3|
2012年2月2日| B | 2 | 3 | 3|
2012年3月1日| A | 4 | 4 | 2|
现在我想创建另一个DataTable,如下所示:

Job1
员工| 2012年1月1日| 2012年1月2日| 2012年1月3日| 2012年2月1日| 2012年2月2日|
---------|----------|----------|----------|----------|----------|
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 ||
总数| 10.50 | 9 | 10 | 9 | 5|
请建议如何使用Linq和C#制作此透视表


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

由于列的动态特性,您无法使用LINQ进行查询。LINQtoSQL需要一种静态方式将结果集字段映射到属性值。相反,您可以查看
PIVOT
SQL语句,并将结果填入
DataTable


谢谢您的回复,现在我对linq了解不多,我的问题是什么是db.foos?我也不能硬编码员工姓名,因为他们是动态的。@user1254053好吧,我怎么能从你的问题中知道呢?你们甚至并没有在数据库中指定表的名称,这就是我使用Foo的原因。
db
变量是您的
DbContext
(我相信您使用的是EF 4.1或更高版本)。@lazyberezovsky员工姓名在您的答案中是静态的,是否可以在其中创建动态列,因为我不知道员工姓名,也无法对其进行硬编码。无意冒犯任何人,我认为这句格言是“您尝试了什么”不一定对所有直接问题都有用。当我们不知道如何进行时,我们如何证明我们已经尝试过了?可能重复
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)
            };