[英]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
函數)可以返回零結果。 根據您的需要使用Single
, SingleOrDefault
, First
或FirstOrDefault
。
例如return (Referee)result.SingleOrDefault();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.