我有通过每个部分进行迭代,并创建所述细胞的行,以最终创建表。 这里每节行0....n
和行具有细胞说0...n
例如,如下图所示:
Row 0-> Cell0 | Cell1| Cell2 | Cell3 | Cell4 | Cell5
Row 1-> Cell0 | Cell1| Cell2 | Cell3 | Cell4 | Cell5
Row 2-> Cell0 | Cell1| Cell2 | Cell3 | Cell4 | Cell5
..
我想创建一个lambda表达式(说):
var allColumns = ...........
要获得所有CELL0的,那么所有小区1的,所有小区2的等等......这样我就可以在循环迭代,并创建一个表中的每个。 要求不希望我被排走行,但因为在上图中所示,它希望我通过柱去列(单元格,我创建了CELL0的第一则小区1然后您就小区2的等,像下面的循环。
foreach(Cell c in allColumns){
//I want to iterate in this loop and create my cells and rows.
}
你可以帮给我这个lambda表达式。
我试着这样做
var allColumns = Sections.Rows.SelectMany(a=>a.Cells).GroupBy(What should come here).
你可以改善或提出一个更好的Lambda表达式保持上述foreach循环和上图中的初衷。 提前致谢。
你可以试试这个演示,我曾放在一起,看看它是否适合你(应该放在一个Windows控制台应用程序):
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] {
new DataColumn("col1"),
new DataColumn("col2"),
new DataColumn("col3") });
dt.Rows.Add("cell0", "cell1", "cell2");
dt.Rows.Add("cell0", "cell1", "cell2");
dt.Rows.Add("cell0", "cell1", "cell2");
dt.Rows.Add("cell0", "cell1", "cell2");
// writes out the original data
foreach (DataRow row in dt.Rows)
{
foreach (var column in row.ItemArray)
Console.Write("{0} ", column);
Console.WriteLine();
}
Console.WriteLine();
// reverses columns and rows
var result = dt.Columns
.Cast<DataColumn>()
.Select(column =>
dt.AsEnumerable()
.Select(row =>
row.ItemArray[column.Ordinal].ToString()));
// writes out the reversed columns and rows
foreach (var row in result)
{
foreach(var column in row)
Console.Write("{0} ",column);
Console.WriteLine();
}
Console.ReadKey();
Linqpad DEMO的计划
我把伊万GS代码并创建了一个Linqpad计划
void Main(){
// get and write out the original data
var dt = GetDataTable();
dt.Dump();
// get columns
var result = GetColumnsFromDataTable(dt);
result.ElementAt(0).Dump();
result.ElementAt(1).Dump();
result.ElementAt(2).Dump();
}
private IEnumerable<EnumerableRowCollection<String>> GetColumnsFromDataTable(DataTable dt){
// Lambda Expression to get the cells
// vertically for a section containing rows
var result = dt.Columns.Cast<DataColumn>()
.Select(column => dt.AsEnumerable()
.Select(row => row.ItemArray[column.Ordinal].ToString()));
return result;
}
private DataTable GetDataTable(){
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] {
new DataColumn("col1 id"),
new DataColumn("col2 name"),
new DataColumn("col3 job")
});
dt.Rows.Add("1", "John", "Barista");
dt.Rows.Add("2", "Mike", "Handyman");
dt.Rows.Add("3", "Jane", "Teacher");
dt.Rows.Add("4", "Quentin", "Producer");
return dt;
}
文章来源: Lambda Expression to get the cells vertically for a section containing rows