为什么 myDataTable.AsEnumerable().DefaultIfEmpty(myDataTable.NewRow()).First(...) NOT return myDataTable.NewRow() 当 .First(...) 为空时?
Why does myDataTable.AsEnumerable().DefaultIfEmpty(myDataTable.NewRow()).First(...) NOT return myDataTable.NewRow() when .First(...) is empty?
我正在尝试获取主键值等于我提供给此 LINQ 查询的值的数据 table 的第一行,或者从 table.
我试过了
DataRow Foo = myDataTable.AsEnumerable().DefaultIfEmpty(myDataTable.NewRow()).First(Row => Row.Field<string>("KEY").equals("Bar"))
但它抛出 InvalidOperationException
,告诉我 'Sequence contains no matching element'。
我尝试过与
类似的东西
DataRow Foo = myDataTable.AsEnumerable().DefaultIfEmpty(myDataTable.NewRow()).FirstOrDefault(Row => Row.Field<string>("KEY").equals("Bar"))
因为我认为那会 return 我在 DefaultIfEmpty(...)
中指定的值,但它只会 return 为 null。
所以...我在这里做错了什么?有办法实现吗?
我想你的查询应该是:
var key = "Bar";
var foo = myDataTable.AsEnumerable()
.FirstOrDefault(row => row.Field<string>("KEY") == key) ?? myDataTable.NewRow();
DefaultIfEmpty()
为您提供的只是一个项目,用于在集合为空时进行查询。问题是通过使用 First()
,必须找到满足条件 的行 。显然你没有,所以抛出异常。
我正在尝试获取主键值等于我提供给此 LINQ 查询的值的数据 table 的第一行,或者从 table.
我试过了
DataRow Foo = myDataTable.AsEnumerable().DefaultIfEmpty(myDataTable.NewRow()).First(Row => Row.Field<string>("KEY").equals("Bar"))
但它抛出 InvalidOperationException
,告诉我 'Sequence contains no matching element'。
我尝试过与
类似的东西DataRow Foo = myDataTable.AsEnumerable().DefaultIfEmpty(myDataTable.NewRow()).FirstOrDefault(Row => Row.Field<string>("KEY").equals("Bar"))
因为我认为那会 return 我在 DefaultIfEmpty(...)
中指定的值,但它只会 return 为 null。
所以...我在这里做错了什么?有办法实现吗?
我想你的查询应该是:
var key = "Bar";
var foo = myDataTable.AsEnumerable()
.FirstOrDefault(row => row.Field<string>("KEY") == key) ?? myDataTable.NewRow();
DefaultIfEmpty()
为您提供的只是一个项目,用于在集合为空时进行查询。问题是通过使用 First()
,必须找到满足条件 的行 。显然你没有,所以抛出异常。