首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ UNPIVOT几个列

LINQ UNPIVOT几个列
EN

Stack Overflow用户
提问于 2017-01-26 04:22:22
回答 3查看 571关注 0票数 1

我有以下几点:

代码语言:javascript
复制
1_A   |  1_B  |  2_A  | 2_B   |  3_A  |   3_B   |
------+-------+-------|-------+-------+---------|
10    |  100  |  12   | 50    |  300  |   52    |

它应成为:

代码语言:javascript
复制
Type  |  A    |  B    | 
------+-------+-------|
1     |  10   |  100  |
2     |  12   |  50   |
3     |  300  |  52   |

它在LINQ中可行吗?如果没有,那么Server中最有效的查询是什么?

谢谢

S.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-26 10:11:48

这取决于LINQ查询提供程序的功能,但通常LINQ解决方案是使用SelectMany方法:

代码语言:javascript
复制
var query = db.Table
    .SelectMany(e => new[]
    {
        new { Type = 1, A = e.A1, B = e.B1 },
        new { Type = 2, A = e.A2, B = e.B2 },
        new { Type = 3, A = e.A3, B = e.B3 },
    };
票数 2
EN

Stack Overflow用户

发布于 2017-01-26 04:24:28

在sql中最好的方法是使用CROSS APPLY

代码语言:javascript
复制
SELECT [Type], A, B
FROM   Yourtable
       CROSS apply(VALUES (1,[1_A],[1_B]),
                          (2,[2_A],[2_B]),
                          (3,[3_A],[3_B])) tc ([Type], A, B) 
  • Live Demo
票数 1
EN

Stack Overflow用户

发布于 2017-01-26 04:29:47

不确定LINQ,但您可以在SQL中使用CROSS APPLY,如下所示:

代码语言:javascript
复制
with t([1_A]   ,  [1_B]  ,  [2_A] , [2_B]   , [3_A]  , [3_B]) as (
select 10    ,  100  ,  12   , 50    ,  300  ,   52  )
------ Test data setup ends here ------ 

select 
    x.*
from t
cross apply (
    values 
        (1, [1_A],[1_B]),
        (2, [2_A],[2_B]),
        (3, [3_A],[3_B])
) x (type, A, B);

生产:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41866845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档