簡體   English   中英

C#Linq返回對象

[英]C# Linq return object

我正在嘗試實現一個方法:

  public Referee GetRefereeById(int refereeId)
        {
            var result = from b in Referees
                         where b.PersonId.Equals(refereeId)
                         select b;
            return (Referee)result;
        }

該方法應該返回一個裁判對象。 知道我做錯了什么嗎?

嘗試

return result.FirstOrDefault();

您的選擇可以返回1個以上的裁判。 嘗試

public Referee GetRefereeById(int refereeId)
    {
        var result = (from b in Referees
                     where b.PersonId.Equals(refereeId)
                     select b).FirstOrDefault();
        return (Referee)result;
    }

您可以使用.Single(),但FirstOrDefault是一個更安全的選項。 我假設PersonId應該是唯一的,所以這應該沒關系,但如果沒有找到匹配的數據,Single將拋出異常。

你需要返回一個裁判,而不是很多裁判。

使用FirstOrDefault - 返回序列的第一個元素,如果序列不包含元素,則返回默認值。 (MSDN: http//msdn.microsoft.com/en-us/library/bb340482%28v=vs.110%29.aspx

public Referee GetRefereeById(int refereeId)
{
   return Referees.FirstOrDefault(r => r.PersonId.Equals(refereeId));
}

如果找不到,則返回null

如果您希望找到結果,您應該這樣做

Return result.Single();

如果不確定它是否存在並檢查null:

Return result.SingleOrDefault();

我將實現Single()方法而不是First()。 您的方法將單個裁判返回給調用者。 你想確保在每種情況下你真正得到一個獨特的裁判。 如果有超過1個匹配您的標准,那么您在應用程序中引入了一些非常微妙的錯誤。 假設你正在反對正確的記錄,但你可能正在檢索一個完全不同的記錄。

如果你有一個你在某種記錄上訂購的列表並且真的打算根據排序獲得第一行,那么最好使用First()方法。

嘗試這個:

public Referee GetRefereeById(int refereeId)
        {
            var result = from b in Referees
                         where b.PersonId == refereeId
                         select b;
            return result.FirstOrDefault();
        }

也沒有必要進行轉換以返回結果。

當你說它應該返回物體時,它會做什么?

var result = (from b in Referees
              where b.PersonId.Equals(refereeId)
              select b).SingleOrDefault();
return result;

這將返回一個Referee對象。

您的查詢(更具體地說, Where函數)可以返回零結果。 根據您的需要使用SingleSingleOrDefaultFirstFirstOrDefault

例如return (Referee)result.SingleOrDefault();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM