【问题标题】:How to convert a foreach within a foreach to LINQ, if it's possible如果可能的话,如何将 foreach 中的 foreach 转换为 LINQ
【发布时间】:2011-07-19 01:17:20
【问题描述】:

我有一个在 foreach 中的 foreach,我很想将它转换为 LINQ。如果只是 1 个 foreach 我可以使用 Where 但我很困惑。这是我的代码。

基本上我需要找到发票,但这取决于向下 2 层的元数据。我认为代码是不言自明的。

currentMetaData >>> Is created outside of the foreach code 
It's an object, but the code below works.

foreach (var item in this.invoices.Items)
{
  foreach (var metaData in item.MetaDatas)
  {
    if (metaData == currentMetaData)
    {
      name = item.Name;
      break;
    }
  }
}

我很想用 LINQ 来缩短它。这可能吗?

【问题讨论】:

    标签: linq linq-to-sql foreach linq-to-objects where-clause


    【解决方案1】:

    这将给出所有名称

     var name = 
                 from i in this.invoices
                 from m in i.Metadata
                 where m == currentMetadata
                 select i.Name;
    

    仅第一个值,用于模拟现有循环中的 break; 语句。

     string name = 
                 (from i in this.invoices
                 from m in i.Metadata
                 where m == currentMetadata
                 select i.Name).First();
    

    【讨论】:

    • 好东西..谢谢! .. 我想它不可能转换为 LAMBDA,因为有 2 个 Froms?对吗?
    • @Martin:不,您可以为此使用 lambda 形式,以及 SelectMany 调用。
    • 你为什么在这里打电话给ToList?这不会做任何有用的事情 - 事实上,它消除了使用 First 的部分意义(即在您到达第一个元素后立即停止评估查询)。
    • @Jon,对,我正在尝试不同的表单,但我在括号内编写不同的表单时不知不觉地离开了 ToList() :) 感谢您指出,我正在编辑它。
    • 嗨,乔恩,您有用于我的查询的 selectmany 示例吗?这让我很感兴趣..
    猜你喜欢
    • 2017-01-02
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多