c# - 如何在 LINQ 表达式中预设变量?

标签 c# linq

我正在创建一个基于数据行的对象数组,如下所示。在工作时,我通过从行中的单元格中提取相同的值来分配给多个字段,这让我有点困扰。通常,这个东西会在循环之前预先准备好,然后多次设置但是,我直到内部实际迭代才获得值。 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();

请注意,实际示例有点复杂,上面的代码是问题的最小示例。我确实意识到这里的UnoDuo 是多余的。 :)

最佳答案

您可以这样做:

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/

相关文章:

c# - 防止在 C# 或 SQL 中插入或更新数据

c# - 如果 model 为 null ,如何处理 null 异常,如何在 mvc 的 View 中处理它?

c# - 使用linq过滤列表中的列表

c# - 除了 LINQ 查询,您如何在 C# 中使用匿名类型?

c# - NHibernate、CaSTLe、Linq 之间的区别——它们针对的是谁?

c# - 获取给定时间间隔和步长的日期范围

c# - 加入时 Linq 返回太多结果

c# - 如何解释没有任何拆分意义的控制台值?

c# 添加到列表空引用(列表的实例存在)

javascript - 当存在字节顺序标记时,CssSquidSensor 和 JavaScriptSquidSensor 都失败并出现解析错误