我正在创建一个基于数据行的对象数组,如下所示.在工作的时候,通过从行中的单元格中拉出相同的值,我做了一些操作,这让我感到困扰.通常,这个东西会在循环之前预先准备然后只设置多次但是在这里,直到实际迭代内部我都没有获得该值.
return table.Rows.Cast() .Select(row => new Beep { Uno = HeavyComputation(row["ID"]), Duo = HeavyComputation(row["ID"]) }).ToList();
能以更好的方式解决这个问题吗?有点像(只是在这里做白日梦)吗?
return table.Rows.Cast() .Preset("int preComputed = HeavyComputation(row['ID'])" .Select(row => new Beep { Uno = preComputed, Duo = preComputed }).ToList();
请注意,实际示例有点复杂,上面的代码是问题的最小例证.我确实意识到Uno和Duo在这里是多余的.:)
你可以这样做:
return table.Rows.Cast() .Select(row => { long preComputed = HeavyComputation(row["ID"]); return new Beep { Uno = preComputed, Duo = preComputed }; });
在这种情况下,参数Select
是a Func
.由于a Func<>
只是一个委托,您可以传递一个匿名方法,Select
如上例所示.你也可以这样做:
public Beep TransformToBeep(DataRow dr) { //Do a lot of work here return new Beep { ... }; }
然后在你的Select
简单写中:
return table.Rows.Cast().Select(TransformToBeep).ToList();