使用First()时出现InvalidOperationException

时间:2011-05-26 21:23:11

标签: linq-to-entities

var key = bindingList.Select((item, index) => new {item})
                    .Where(x => x.item.Description == description)
                    .Select(x => x.item.Key)
                    .First();

我知道我可以使用FirstOrDefault()来避免异常,但是这种情况下的默认值(int 0)不是我想要的,我需要-1作为默认值。有没有其他方法可以在没有实际捕获异常的情况下执行此操作?

谢谢, 米哈伊尔

1 个答案:

答案 0 :(得分:2)

尝试使用DefaultIfEmpty

var key = bindingList.Select((item, index) => new {item})
                .Where(x => x.item.Description == description)
                .Select(x => x.item.Key)
                .DefaultIfEmpty(-1)
                .First();

如果序列为空,DefaultIfEmpty LINQ运算符将返回未更改的序列(如果它不为空),否则返回仅包含指定值的序列(在本例中为-1)。此时,您可以安全地调用First,而无需担心抛出异常。