我试图得到一个数据表的第一行,它的主键值等于我为这个LINQ查询提供的值,或者是该表中的一个新行。
我已经尝试了
DataRow Foo = myDataTable.AsEnumerable().DefaultIfEmpty(myDataTable.NewRow()).First(Row => Row.Field<string>("KEY").equals("Bar"))
但它会抛出一个InvalidOperationException
,告诉我&#39;序列中没有匹配的元素&#39;。
我尝试了与
类似的东西DataRow Foo = myDataTable.AsEnumerable().DefaultIfEmpty(myDataTable.NewRow()).FirstOrDefault(Row => Row.Field<string>("KEY").equals("Bar"))
因为我认为这将返回我在DefaultIfEmpty(...)
中指定的值,但它只返回null。
那么......我在这里做错了什么?有没有办法实现这个目标?
答案 0 :(得分:2)
我想你的查询应该是:
var key = "Bar";
var foo = myDataTable.AsEnumerable()
.FirstOrDefault(row => row.Field<string>("KEY") == key) ?? myDataTable.NewRow();
DefaultIfEmpty()
为您提供的所有内容都是一个项目,可以查询该集合是否为空。问题是通过使用First()
,必须找到满足条件的行。显然你并没有抛出异常。