gpt4 book ai didi

c# - 序列包含多个元素 - SingleOrDefault 无济于事

转载 作者:IT王子 更新时间:2023-10-29 04:33:48 25 4
gpt4 key购买 nike

我有下面这行,但仍然得到一个异常“序列包含多个元素

Details rd = this.db.Details.SingleOrDefault(x => x.TId == Id && x.TypeId == TypeId);

我希望 SingleOrDefault 能够避免异常。

最佳答案

SingleOrDefault 返回一个 SINGLE 元素,如果没有找到元素则返回 null。如果在您的 Enumerable 中找到 2 个元素,那么它会抛出您看到的异常。就像 Highlander 一样……只有一个。

FirstOrDefault 返回它找到的 FIRST 元素,如果没有找到元素则返回 null。因此,如果有 2 个元素与您的谓词匹配,则第二个元素将被忽略。

假设您不关心是否有多个匹配项并且您只想要第一个匹配项或者如果没有找到匹配项则返回 null ...那么您可能需要以下...

Details rd = this.db.Details
.FirstOrDefault(x => x.TId == Id && x.TypeId == TypeId);

请注意,这两种方法都只返回一个元素,它们的区别仅在于找到匹配后的操作。 First 停止查看该点并返回它找到的内容,Single 不断检查列表的其余部分以确保没有更多匹配项。 OrDefault 部分确定在未找到匹配项时返回的内容。如果没有找到值,SingleOrDefaultFirstOrDefault 返回 null 但如果您只使用 SingleFirst 那么它必须找到一场比赛,否则会抛出异常。

编辑:史蒂夫说得好由于 First 返回第一个元素,您可能需要使用 OrderBy 以确保您想要的元素确实是第一个。例如...假设您的对象有一个 UpdateDate 属性并且您想要具有最新 UpdateDate 的对象...

Details rd = this.db.Details
.OrderByDescending(x => x.UpdateDate)
.FirstOrDefault(x => x.TId == Id && x.TypeId == TypeId);

关于c# - 序列包含多个元素 - SingleOrDefault 无济于事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22691622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com