Sequence包含多个元素 – SingleOrDefault没有帮助
我有下面的行,但仍然得到一个例外“ 序列包含多个元素 ”
Details rd = this.db.Details.SingleOrDefault(x => x.TId == Id && x.TypeId == TypeId);
我希望SingleOrDefault可以避免exception。
SingleOrDefault
返回SINGLE元素,如果没有找到元素,则返回null。 如果在您的Enumerable中找到2个元素,那么它会抛出您看到的exception。 就像Highlander ……单身 – 只有一个。
FirstOrDefault
返回它找到的FIRST元素,如果没有找到元素,则返回null。 因此,如果有2个元素与您的谓词匹配,则忽略第二个元素。
假设您不关心是否有多个匹配而您只想要第一个匹配,如果没有找到匹配则为null …那么您可能需要以下内容…
Details rd = this.db.Details .FirstOrDefault(x => x.TId == Id && x.TypeId == TypeId);
请注意,这两种方法只返回一个元素,它们只有在找到匹配项后才会有所不同。 First
停止查看该点并返回它找到的内容, Single
继续检查列表的其余部分以确保没有更多匹配。 如果未找到匹配项, OrDefault
部分将确定它返回的内容。 如果没有找到值, SingleOrDefault
或FirstOrDefault
返回null但是如果你只使用Single
或First
那么它必须找到一个匹配,否则它将引发exception。
编辑:好点Steve Since First
返回您可能需要使用OrderBy
的第一个元素,以确保您想要的元素确实是第一个。 例如……假设您的对象具有UpdateDate属性,并且您希望该对象具有最新的UpdateDate …
Details rd = this.db.Details .OrderByDescending(x => x.UpdateDate) .FirstOrDefault(x => x.TId == Id && x.TypeId == TypeId);
如果您有一个列表,将列表转换为IEnumerable列表,那么您可以使用FirstOrDefault方法
IEnumerable details = new List (); var FirstRow = details.FirstOrDefault(); string Count = "0"; if (FirstRow != null) { Count = FirstRow.TotalCount.ToString(); } else { Count = "0"; }