>>DECLARE @test TABLE (Id uniqueidentifier default newID(), ColumnId int, RowId INT) >>INSERT @test ( ColumnId, RowId ) VALUES ( 1,1 ) >>INSERT @test ( ColumnId, RowId ) VALUES ( 1,2 ) >>INSERT @test ( ColumnId, RowId ) VALUES ( 2,1 ) >>INSERT @test ( ColumnId, RowId ) VALUES ( 2,2 ) >>SELECT * FROM @test >> >>SELECT RowID, >> cast([1] as uniqueidentifier) as Column1, >> cast([2] as uniqueidentifier) as Column2 >>from (select cast(Id AS BINARY(16)) AS id, columnId, rowID FROM @test) tmp >>pivot >>( >> max( id ) >> for columnID in ([1],[2]) >>) AS pvt >>>>
>>PivotTestTable.AsParallel() >> .GroupBy (pt => pt.RowId ) >> .Select (pt => new { >> RowId = pt.Key, >> Column1 = pt.SingleOrDefault (p => p.ColumnId==1).Id, >> Column2 = pt.SingleOrDefault (p => p.ColumnId==2).Id >> }) >>>
var data = dbContext.MyPivots.ToArray(); var rows = data.Select (mp => mp.RowId).Distinct().Select( (row,pos) => new {row,pos} ); var cols = data.Select (mp => mp.ColumnId).Distinct().Select( (col,pos) => new {col,pos} ); Guid?[,] pivot = new Guid?[rows.Count(),cols.Count()]; foreach (var record in data) { int r = rows.Single( rr => rr.row==record.RowId).pos; int c = cols.Single( cl => cl.col==record.ColumnId).pos; pivot[r,c] = (record.Id == null?null:record.Id); }Cetin