我有以下几点:
1_A | 1_B | 2_A | 2_B | 3_A | 3_B |
------+-------+-------|-------+-------+---------|
10 | 100 | 12 | 50 | 300 | 52 |它应成为:
Type | A | B |
------+-------+-------|
1 | 10 | 100 |
2 | 12 | 50 |
3 | 300 | 52 |它在LINQ中可行吗?如果没有,那么Server中最有效的查询是什么?
谢谢
S.
发布于 2017-01-26 10:11:48
这取决于LINQ查询提供程序的功能,但通常LINQ解决方案是使用SelectMany方法:
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 },
};发布于 2017-01-26 04:24:28
在sql中最好的方法是使用CROSS APPLY。
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) 发布于 2017-01-26 04:29:47
不确定LINQ,但您可以在SQL中使用CROSS APPLY,如下所示:
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);生产:

https://stackoverflow.com/questions/41866845
复制相似问题