2014-03-27 68 views

回答

19

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部分確定它返回的內容。 SingleOrDefaultFirstOrDefault如果未找到值,則返回null,但如果您只使用SingleFirst,則它必須找到一個匹配項,否則它將拋出異常。

編輯:好點的史蒂夫 由於First返回的第一個元素,你可能需要使用一個OrderBy,以確保你想要的元素的確是第一次。例如...假設你的對象有一個UpdateDate財產,你想與最新的UpdateDate對象...

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

我會添加建議的可能性,使用OrderBy – Steve

0

如果你有一個列表,該列表轉換爲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"; 
      } 
+0

爲我工作。 –

相關問題