如何将最多7个行分组到一行中,其中set列确定分组?
我没有修复行。
我看到Stack溢出已经有了这个问题,但答案是在SQL中。
我需要LINQ。我不知道如何实现这个目标?
请查看下面的StackOverflow链接
T- SQL group rows into columns
Table
Id RefId Name
------------------------
1 1 Test1
2 1 Test2
3 1 Test3
4 2 Test4
5 2 Test5
所以,输出将是......
RefId Name1 Name2 Name3 Name4 Name5 Name6 Name7 Id1 Id2 Id3 Id4 Id5 Id6 Id7
-----------------------------------------------------------------------------------
1 Test1 Test2 Test4 null null null null 1 2 3 null null null null
2 Test4 Test5 null null null null null 4 5 null null null null null
这里修复了行达到7 ...不超过
答案 0 :(得分:2)
这可能是一件简单的事情吗?
var persons = new []{
new Person{Name = "John", Link = "L1"},
new Person{Name = "John", Link = "L2"},
new Person{Name = "John", Link = "L3"},
new Person{Name = "Steve", Link = "L1"},
new Person{Name = "Steve", Link = "L2"},
};
var grouped = persons.GroupBy(p => p.Name)
.Select(g => new{Name = g.Key, Links = g.Select(x => x.Link)});
答案 1 :(得分:0)
以下是涵盖您案例的解决方案:
DataTable dtInput = new DataTable();
dtInput.Columns.Add("Id");
dtInput.Columns.Add("RefId");
dtInput.Columns.Add("Name");
DataTable dtOutput = new DataTable();
dtOutput.Columns.Add("RefId");
Enumerable.Range(1,7).ToList()
.ForEach( i => { dtOutput.Columns.Add("Name"+i ); dtOutput.Columns.Add("Id"+i ); } );
dtInput.Rows.Add( new object[] { "1", "1", "Test1" } );
dtInput.Rows.Add( new object[] { "2", "1", "Test2" } );
dtInput.Rows.Add( new object[] { "3", "1", "Test3" } );
dtInput.Rows.Add( new object[] { "4", "2", "Test4" } );
dtInput.Rows.Add( new object[] { "5", "2", "Test5" } );
dtInput.AsEnumerable()
.GroupBy(x => new { RefId = x["RefId"] })
.Select(x => new { RefId = x.Key.RefId,
Names = x.Select(x1 => x1["Name"]),
Ids = x.Select(x1 => x1["Id"])})
.ToList().ForEach( g =>
{
var row = dtOutput.NewRow();
row["RefId"] = g.RefId;
g.Names.Select( (n, idx) => new { idx = idx + 1, name = n } )
.ToList().ForEach( n => row["Name"+n.idx] = n.name );
g.Ids.Select( (i, idx) => new { idx = idx + 1, id = i } )
.ToList().ForEach( i => row["Id"+i.idx] = i.id );
dtOutput.Rows.Add( row );
});