将 lambda 用于 select 从 DataTable 返回的前 1 行

Using lambda to select top 1 row returned from DataTable

我有一个名为 currencyAmounts 的数据表并使用 lambda,我的表达式工作正常,直到 return 有不止一种可能性。我在 DataTable 中搜索与我的 "value" 变量匹配的项。如何将以下表达式更改为 select 第一行 returned:

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

这是 运行 时出现以下错误:

Sequence contains more than one matching element

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

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

你需要 First 而不是 Single

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

那是因为单身(来自微软页面)"Returns the only element of a sequence, and throws an exception if there is not exactly one element in the sequence."

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

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

.Single();

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

.SingleOrDefault();