以下LINQ查询正常工作,除非没有返回结果。然后抛出InvalidOperationException。
处理此问题的最佳方法是什么?我如何测试结果的存在并且如果没有结果则移动?我想到了一个尝试捕获,但觉得必须有一个更优雅的解决方案。
在这个例子中,我只期望第一个结果的Id。可能还有其他情况需要返回整个对象。
var drId = dcDest.drs.Where(dr => dr.ContactID == contactId)
.Select(dr => dr.Id).First();
int xId = drId;
答案 0 :(得分:3)
您应该使用SingleOrDefault()
。
FirstOrDefault()
也可以工作,但实际上你是说集合中只应该有一个使'SingleOrDefault()'更合适的选择(如果有多个则会抛出异常)。
另一方面,如果你期望一个序列,但是当没有返回任何元素时需要处理这种情况,你也可以使用DefaultIfEmpty()
在序列为空时返回一个默认值。见http://msdn.microsoft.com/en-us/library/bb355419.aspx
空的时候你想要什么行为?是零或其他什么?