我需要通过添加与通用列表中的对象相对应的行来创建表(LINQ以替换TableRow创建中的foreach)。我们可以使用foreach循环执行下面列出的操作。我们如何使用 LINQ 实现此功能而无需foreach?
注意:需要添加一个表格单元格,对应于对象中的每个属性。
System.Web.UI.WebControls.Table tableControl = new Table();
foreach (FinancialTransaction transaction in transactionsList)
{
TableRow row = new TableRow();
TableCell cellLineNumber = new TableCell();
cellLineNumber.Text = Convert.ToString(transaction.Line);
row.Cells.Add(cellLineNumber);
TableCell cellEmpID = new TableCell();
cellEmpID.Text = Convert.ToString(transaction.EmpID);
row.Cells.Add(cellEmpID);
TableCell cellSSN = new TableCell();
cellSSN.Text = transaction.SSN;
row.Cells.Add(cellSSN);
tableControl.Rows.Add(row);
}
答案 0 :(得分:3)
如果ForEach
为transactionsList
,您可以使用List
LINQ,但您可以稍微提高可读性:
transactionsList.ForEach(transaction => {
TableRow row = new TableRow();
valueList = new object[] {
transaction.Line,
transaction.EmpID,
transaction.SSN
};
row.Cells.AddRange(valueList.Select(value => CreateCell(value))
.ToArray());
});
private TableCell CreateCell(object cellText)
{
TableCell cell = new TableCell();
cell.Text = Convert.ToString(cellText);
return cell;
}
答案 1 :(得分:1)
您还可以使用Aggregate
:
var tableControl = transactionsList.Aggregate(new Table(), (acc, transaction) =>
{
TableRow row = new TableRow();
TableCell cellLineNumber = new TableCell();
cellLineNumber.Text = Convert.ToString(transaction.Line);
row.Cells.Add(cellLineNumber);
TableCell cellEmpID = new TableCell();
cellEmpID.Text = Convert.ToString(transaction.EmpID);
row.Cells.Add(cellEmpID);
TableCell cellSSN = new TableCell();
cellSSN.Text = transaction.SSN;
row.Cells.Add(cellSSN);
acc.Rows.Add(row);
return acc;
});
答案 2 :(得分:0)
Linq本身的foreach怎么样? 或查看this链接
也可以创建自己的Extension Methods