如何处理LINQ查询没有返回的结果?
以下LINQ查询工作正常,除非没有要返回的结果。然后抛出InvalidOperationException 处理这个问题的最佳方法是什么?如何测试结果的存在性,如果没有结果,如何继续?我想尝试一下接球,但觉得必须有一个更优雅的解决方案 在本例中,我只希望得到第一个结果的Id。可能还有其他情况,我希望返回整个对象如何处理LINQ查询没有返回的结果?,linq,entity-framework,entity-framework-4,Linq,Entity Framework,Entity Framework 4,以下LINQ查询工作正常,除非没有要返回的结果。然后抛出InvalidOperationException 处理这个问题的最佳方法是什么?如何测试结果的存在性,如果没有结果,如何继续?我想尝试一下接球,但觉得必须有一个更优雅的解决方案 在本例中,我只希望得到第一个结果的Id。可能还有其他情况,我希望返回整个对象 var drId = dcDest.drs.Where(dr => dr.ContactID == contactId) .Select
var drId = dcDest.drs.Where(dr => dr.ContactID == contactId)
.Select(dr => dr.Id).First();
int xId = drId;
您应该使用
SingleOrDefault()
FirstOrDefault()
也可以工作,但实际上您是说集合中应该只有一个,这使得“SingleOrDefault()”成为更合适的选择(如果有多个,它将抛出异常)
另一方面,如果您需要一个序列,但需要处理没有返回元素的情况,则也可以使用DefaultIfEmpty()
在序列为空时返回默认值。看
当它为空时,您想要什么行为?id为零或其他什么?您应该使用
SingleOrDefault()
FirstOrDefault()
也可以工作,但实际上您是说集合中应该只有一个,这使得“SingleOrDefault()”成为更合适的选择(如果有多个,它将抛出异常)
另一方面,如果您需要一个序列,但需要处理没有返回元素的情况,则也可以使用DefaultIfEmpty()
在序列为空时返回默认值。看
当它为空时,您想要什么行为?id为零或其他?如果返回值为空,则id为sero就可以了。如果返回值为空,则id为sero就可以了。