LINQ在表创建中替换foreach

时间:2012-09-25 06:27:31

标签: c# linq

我需要通过添加与通用列表中的对象相对应的行来创建表(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);
        }

3 个答案:

答案 0 :(得分:3)

如果ForEachtransactionsList,您可以使用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