我们需要将数据从表中的行转置到输出表,以使输入表中的每一行都返回多行。
在输出的每一行中提取数据的逻辑取决于输入行中给定列中是否存在值。

例如

输入表

A,B,C,D,E,F

输出表

A,B,C,[如果D中存在值,则对D中的值进行一些运算]

A,B,C,[如果E中存在值,则对E中的值进行一些运算]

A,B,C,[如果F中存在值,则对F中的值进行一些运算]

为此,我打算执行以下操作:

private IEnumerable<OutputRow> BuildOutputTable(DataTable inputTable)
{
    var outputRows = from inputRow in inputTable.AsEnumerable()
                     select new outputRow(inputRow, *delegateToProcessor*);
    return gbbOutputRows;
}


但这需要我为每个附加值列进行遍历。
我可以避免这种情况,只传递一个委托,以便“选择新的输出行”返回多行吗?

最佳答案

我会做:

var DRows = from inputRow in inputTable.AsEnumerable()
                 where inputRow.D == 'some value'
                 select new outputRow(inputRow, *delegateToProcessor*)

var ERows = from inputRow in inputTable.AsEnumerable()
                 where inputRow.E == 'some value'
                 select new outputRow(inputRow, *delegateToProcessor*)

var FRows = from inputRow in inputTable.AsEnumerable()
                 where inputRow.F == 'some value'
                 select new outputRow(inputRow, *delegateToProcessor*)

return DRows.Union(ERows).Union(FRows);

关于c# - 使用linq从select new返回多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13289422/

10-13 06:50