将 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();
我有一个名为 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();