我有下面的線,但仍得到一個異常「序列包含多個元素」序列包含多個元素 - 的SingleOrDefault沒有幫助
Details rd = this.db.Details.SingleOrDefault(x => x.TId == Id && x.TypeId == TypeId);
我希望的SingleOrDefault將避免例外。
我有下面的線,但仍得到一個異常「序列包含多個元素」序列包含多個元素 - 的SingleOrDefault沒有幫助
Details rd = this.db.Details.SingleOrDefault(x => x.TId == Id && x.TypeId == TypeId);
我希望的SingleOrDefault將避免例外。
SingleOrDefault
如果沒有元素被發現返回SINGLE元件或空。如果在你的Enumerable中找到2個元素,那麼它會拋出你看到的異常。就像Highlander ... with Single - 只能有一個。
FirstOrDefault
返回FIRST找到的元素或null如果沒有找到元素。所以如果有2個元素匹配你的謂詞,第二個元素將被忽略。
假設你如果有多個匹配,你只需要在第一個或空,如果沒有發現匹配...,那麼你可能需要以下不在乎......
Details rd = this.db.Details
.FirstOrDefault(x => x.TId == Id && x.TypeId == TypeId);
注意這兩種方法都只返回一個元素,他們只在找到匹配之後做的不同。 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);
我會添加建議的可能性,使用OrderBy – Steve
如果你有一個列表,該列表轉換爲IEnumerable的名單,那麼你就可以使用FirstOrDefault方法
IEnumerable<BuyOnlineSearchdetails> details = new List<BuyOnlineSearchdetails>();
var FirstRow = details.FirstOrDefault();
string Count = "0";
if (FirstRow != null)
{
Count = FirstRow.TotalCount.ToString();
}
else
{
Count = "0";
}
爲我工作。 –
FirstOrDefault? – Steve