【问题标题】:Best way to catch "Sequence contains no elements"捕捉“序列不包含元素”的最佳方法
【发布时间】:2015-04-16 23:08:19
【问题描述】:

如果Single 没有找到您期望存在的元素,那么它会抛出一个InvalidOperationException。唯一的麻烦是其他事情也会导致这个异常。例如,EF Code First 模型已过时。

我试图通过检查异常消息来缩小范围。然而,这可能会改变,我不会更聪明。有没有更好的方法来解决这个问题?

   try
    {
        return DbSet.Single(filter);
    }
    catch (InvalidOperationException exc)
    {
        if (exc.Message == "Sequence contains no elements")
        {
            throw new UserNotFoundException();
        }

        throw;
    }

【问题讨论】:

    标签: entity-framework entity-framework-6


    【解决方案1】:

    请改用.FirstOrDefault()。然后检查结果是否为空。如果是,则未找到该用户。

    【讨论】:

    • 好的。有点违背 First 的目的,不是吗。
    • First 和 Single 各有所用。当你知道你至少有一个元素,而你没有的可能性很小,你可以使用Single。
    • 在预期结果为int类型时不起作用,默认为0
    猜你喜欢
    • 1970-01-01
    • 2021-01-02
    • 2021-02-19
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多