我有一个LINQ查询,应返回单个结果或不返回结果.我打电话Single()来得到这样的结果:
var propertyDataSource = (from x in myCollection
where SomeCondition(x)
select x).Single();
Run Code Online (Sandbox Code Playgroud)
当我的查询只有一个结果时,这可以正常工作,但是如果没有结果,它会抛出一条System.InvalidOperationException消息,其中包含Sequence不包含任何元素.
我怎样才能解决这个问题?
Mar*_*zek 33
请SingleOrDefault改用.
Single当枚举不包含一个元素时抛出一个异常,当在空枚举上调用时SingleOrDefault<T>返回default(T)(null对于引用类型).请注意,如果枚举中有多个元素,则两者都将抛出.
.SingleOrDefault()将返回单个匹配对象或默认值(null用于引用类型.你必须自己处理这个null案例,因为你最终会NullReferenceException非常快.
作为旁注,您应该使用.Any()而不是.Count() > 0避免在使用IEnumerables 时迭代整个数据集.
.FirstOrDefault()返回null(或类型的默认值)如果不存在(找不到匹配项),.Single()则只需要一个匹配项..SingleOrDefault()如果没有,则返回null(或类型的默认值)但如果有多个匹配则抛出异常.
| 归档时间: |
|
| 查看次数: |
18336 次 |
| 最近记录: |