C# C“Linq First()引发异常”;序列不包含任何元素”;而LongCount()给出1
我有一个私有的C# C“Linq First()引发异常”;序列不包含任何元素”;而LongCount()给出1,c#,linq,exception,datatable,C#,Linq,Exception,Datatable,我有一个私有的DataTable变量dt,它正好包含一行 // In debug session in the immediate window: dt.Rows.Count // shows 1 ; dt.Rows[0]["uid"] // shows "IDxxx" 我觉得一切都很好。在代码中,下一行总是给我上面提到的异常序列不包含任何元素 var urow_ = usr_dt.AsEnumerable(); var urow = urow_.First<DataRow>(x
DataTable
变量dt
,它正好包含一行
// In debug session in the immediate window:
dt.Rows.Count
// shows 1 ;
dt.Rows[0]["uid"]
// shows "IDxxx"
我觉得一切都很好。在代码中,下一行总是给我上面提到的异常<代码>序列不包含任何元素
var urow_ = usr_dt.AsEnumerable();
var urow = urow_.First<DataRow>(x => x["uid"] == uid);
我是C#的新手。你知道这种情况是怎么回事吗
编辑:
以防任何新来C#的人和我一样困惑
而下面评论中善意提供的链接建议
你正在做一个有条件的
First()
,而不是没有条件的LongCount()
。。。唯一存在的元素可能是x=>x[“uid”]**!=**uid
@xantatos,文档给我的印象是,此错误是针对空源而产生的,而不是空结果?我想我会得到类似于null的东西…不是真的,请参见:“InvalidOperationException:没有元素满足谓词中的条件。-或者-源序列为空。”FirstOrDefault
将为您提供null,First
将在没有元素的情况下引发异常。First获得源代码null异常ArgumentNullException,和空原点异常InvalidOperationException。在您的情况下,FirstOrDefault可能是更好的选择
urow_.LongCount()
// I get 1.
Exceptions | Exception Condition
ArgumentNullException | source is null.
InvalidOperationException | The source sequence is empty.
ArgumentNullException | source or predicate is null.
InvalidOperationException | No element satisfies the condition in predicate.
| -or-
| The source sequence is empty.