当前位置:  开发笔记 > 编程语言 > 正文

如何在LINQ表达式中预先设置变量?

如何解决《如何在LINQ表达式中预先设置变量?》经验,为你挑选了1个好方法。

我正在创建一个基于数据行的对象数组,如下所示.在工作的时候,通过从行中的单元格中拉出相同的值,我做了一些操作,这让我感到困扰.通常,这个东西会在循环之前预先准备然后只设置多次但是在这里,直到实际迭代内部我都没有获得该值.

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();

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



1> Klaus Byskov..:

你可以这样做:

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();


我会冒昧地破解你的代码,以便更好地与我交谈.除此之外 - 完美!+1
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有