【问题标题】:Using lambda to select top 1 row returned from DataTable使用 lambda 选择从 DataTable 返回的前 1 行
【发布时间】:2018-08-08 14:06:57
【问题描述】:

我有一个名为 currencyAmounts 的数据表并使用 lambda,我的表达式工作正常,直到返回有多种可能性。我正在 DataTable 中搜索与我的“值”变量匹配的内容。如何更改以下表达式以仅选择返回的第一行:

DataRow resultRow = currencyAmounts.AsEnumerable().Single(r => ((decimal)r["OriginalAmount"]) == value);

运行时出现以下错误:

序列包含多个匹配元素

【问题讨论】:

  • 错误消息实际上解释了这一切。当条件中有多个匹配元素时 Single() 抛出异常。(或没有元素)
  • 使用 Single() 表示结果集应包含 1 个元素。如果您想从序列中获取第一个,请使用 FirstOrDefault()
  • 正是我想要的,巴里。谢谢。

标签: c# linq lambda datatable datarow


【解决方案1】:

错误消息实际上解释了这一切。当条件中有多个匹配元素(或没有元素)时,Single() 抛出异常。您应该使用First()FirstOrDefault()

DataRow resultRow = currencyAmounts.AsEnumerable().FirstOrDefault(r => ((decimal)r["OriginalAmount"]) == value);

【讨论】:

    【解决方案2】:

    你需要First 而不是Single

    【讨论】:

      【解决方案3】:

      您可以将“Single()”更改为“First()”。

      这是因为 single(来自 microsoft 页面)“返回序列的唯一元素,如果序列中不完全有一个元素,则抛出异常。”

      【讨论】:

        【解决方案4】:

        如果集合中的元素多于或少于 1 个,Single 会抛出错误。

        如果您想要第一个,并且确定总是至少有一个结果,请使用

        .Single();
        

        如果您不确定总是至少有一个结果,请使用

        .SingleOrDefault();
        

        【讨论】:

          猜你喜欢
          • 2019-06-22
          • 2018-09-24
          • 1970-01-01
          • 2015-12-07
          • 1970-01-01
          • 2021-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多