我正在创建一个基于数据行的对象数组,如下所示。在工作时,我通过从行中的单元格中提取相同的值来分配给多个字段,这让我有点困扰。通常,这个东西会在循环之前预先准备好,然后多次设置但是,我直到内部实际迭代才获得值。 p>
return table.Rows.Cast<DataRow>()
.Select(row => new Beep
{
Uno = HeavyComputation(row["ID"]),
Duo = HeavyComputation(row["ID"])
}).ToList();
可以用更好的方式解决这个问题吗?有点像(只是在这里做白日梦)所以?
return table.Rows.Cast<DataRow>()
.Preset("int preComputed = HeavyComputation(row['ID'])"
.Select(row => new Beep
{
Uno = preComputed,
Duo = preComputed
}).ToList();
请注意,实际示例有点复杂,上面的代码是问题的最小示例。我确实意识到这里的Uno 和Duo 是多余的。 :)
最佳答案
您可以这样做:
return table.Rows.Cast<DataRow>()
.Select(row => {
long preComputed = HeavyComputation(row["ID"]);
return new Beep
{
Uno = preComputed,
Duo = preComputed
};
});
在这种情况下,Select
的参数是 Func<DataRow, Beep>
.自Func<>
只是一个委托(delegate),你可以传递一个匿名方法给Select
就像上面的例子一样。你也可以这样做:
public Beep TransformToBeep(DataRow dr)
{
//Do a lot of work here
return new Beep { ... };
}
然后在你的 Select
简单地写:
return table.Rows.Cast<DataRow>().Select(TransformToBeep).ToList();
关于c# - 如何在 LINQ 表达式中预设变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26420978/