2016-06-23 35 views
-3

Raw data
我在数据表中的数据按第一个图像,而是想将我的数据表或创建新的输出是在第二图象一个新的DataTable多列到行

   var reportData = (from C in Table1 
            join LC in Table2 on C.Id equals LC.Id 
            select new { C.Id, C.User, LC.Phy, LC.Che, LC.Bio, LC.Math }).ToList(); 

       foreach (var item in reportData) 
       { 

        lstLc.Add(new Launch() { Username= item.User, Phy = item.Phy, Che = item.Che, Bio = item.Bio, Math = item.Math }); 
     } 

原始数据:Output needed

User Phy Che Bio Math 
A  12  20  16  10 
B  15  19  18  20 
C  13  17  11  18 

输出需要..

User Type value 
A  Phy  12 
A  Che  20 
A  Bio  16 
A  Math 10 
B  Phy  15 
B  Che  19 
B  Bio  18 
B  Math 20 
C  Phy  13 
C  Che  17 
C  Bio  11 
C  Math 18 
+0

是什么问题? – Aristos

+0

我有数据在数据表按照第一个图像,但想要转换我的数据表或创建一个新的数据表与第二个图像中的新输出。 – Aditya

+1

你是否明白这是一个请求,而不是一个问题?不仅如此,你甚至不会提供一些代码来处理。数据在哪里生活? – Aristos

回答

1

您可以使用union这样的:

SELECT User, Type, value FROM (
    SELECT User, 'Phy' AS 'Type', Phy AS 'value' FROM table1 
    UNION 
    SELECT User, 'Che' AS 'Type', Che AS 'value' FROM table1 
    UNION 
    SELECT User, 'Bio' AS 'Type', Bio AS 'value' FROM table1 
    UNION 
    SELECT User, 'Math' AS 'Type', Math AS 'value' FROM table1 
) AS t 
ORDER BY User 

在LINQ,你可以做这样的事情:

var list = entity.Select(e => new { User = e.User, Type = "Phy", value = e.Phy }) 
    .Union(entity.Select(e => new { User = e.User, Type = "Che", value = e.Che })) 
    .Union(entity.Select(e => new { User = e.User, Type = "Bio", value = e.Bio })) 
    .Union(entity.Select(e => new { User = e.User, Type = "Math", value = e.Math })) 
    .OrderBy(e => e.User); 

编辑你的代码改成这样:

var repFlatData = (from C in Table1 
        join LC in Table2 on C.Id equals LC.Id 
        select new { C.Id, C.User, LC.Phy, LC.Che, LC.Bio, LC.Math }).ToList(); 

var reportData = repFlatData.Select(e => new { User = e.User, Type = "Phy", value = e.Phy }) 
      .Union(repFlatData.Select(e => new { User = e.User, Type = "Che", value = e.Che })) 
      .Union(repFlatData.Select(e => new { User = e.User, Type = "Bio", value = e.Bio })) 
      .Union(repFlatData.Select(e => new { User = e.User, Type = "Math", value = e.Math })) 
      .OrderBy(e => e.User); 

foreach (var item in reportData) { 
    lstLc.Add(new Launch() { Username= item.User, Type = item.Type, Value = item.Value }); 
} 

当然,您需要将您的Launch类更改为只有列(用户名,类型,值)。

+0

我想在ASP.net中使用Lambda查询而不是SQL。 – Aditya

+0

Thinks Racil。我编辑了我的问题,并用C#编写了实际的代码。所以你可以在相同的代码上帮助我。因为我是Asp.net的新手。 – Aditya

+0

看到我编辑的答案。 –