如何处理LINQ查询返回的结果?

时间:2011-01-11 03:00:49

标签: linq entity-framework entity-framework-4

以下LINQ查询正常工作,除非没有返回结果。然后抛出InvalidOperationException。

处理此问题的最佳方法是什么?我如何测试结果的存在并且如果没有结果则移动?我想到了一个尝试捕获,但觉得必须有一个更优雅的解决方案。

在这个例子中,我只期望第一个结果的Id。可能还有其他情况需要返回整个对象。

var drId = dcDest.drs.Where(dr => dr.ContactID == contactId)
                      .Select(dr => dr.Id).First();

int xId = drId;

1 个答案:

答案 0 :(得分:3)

您应该使用SingleOrDefault()

FirstOrDefault()也可以工作,但实际上你是说集合中只应该有一个使'SingleOrDefault()'更合适的选择(如果有多个则会抛出异常)。

另一方面,如果你期望一个序列,但是当没有返回任何元素时需要处理这种情况,你也可以使用DefaultIfEmpty()在序列为空时返回一个默认值。见http://msdn.microsoft.com/en-us/library/bb355419.aspx

空的时候你想要什么行为?是零或其他什么?