Sta*_*ace 23 c# linq-to-entities c#-4.0
我有下面的行,但仍然得到一个例外" 序列包含多个元素 "
Details rd = this.db.Details.SingleOrDefault(x => x.TId == Id && x.TypeId == TypeId);
Run Code Online (Sandbox Code Playgroud)
我希望SingleOrDefault可以避免异常.
Kev*_*vin 40
SingleOrDefault返回SINGLE元素,如果没有找到元素,则返回null.如果在您的Enumerable中找到2个元素,则它会抛出您看到的异常.就像Highlander ......单身 - 只有一个.
FirstOrDefault返回它找到的FIRST元素,如果没有找到元素,则返回null.因此,如果有2个元素与您的谓词匹配,则忽略第二个元素.
假设您不关心是否有多个匹配而您只想要第一个匹配,如果没有找到匹配则为null ...那么您可能需要以下...
Details rd = this.db.Details
.FirstOrDefault(x => x.TId == Id && x.TypeId == TypeId);
Run Code Online (Sandbox Code Playgroud)
请注意,这两种方法只返回一个元素,它们只有在找到匹配项后才会有所不同. First停止查看该点并返回它找到的内容,Single继续检查列表的其余部分以确保没有更多匹配.OrDefault如果未找到匹配项,该部件将确定返回的内容. SingleOrDefault或者FirstOrDefault,如果没有价值发现返回null,但如果你只是使用Single或First那么它必须找到一个匹配,否则会抛出异常.
编辑:好点史蒂夫
自从First返回第一个元素后,您可能需要使用一个OrderBy元素,以确保您想要的元素确实是第一个.例如......假设您的对象具有UpdateDate属性,并且您希望该对象具有最新的UpdateDate ...
Details rd = this.db.Details
.OrderByDescending(x => x.UpdateDate)
.FirstOrDefault(x => x.TId == Id && x.TypeId == TypeId);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47491 次 |
| 最近记录: |