![](/img/trans.png)
[英]Enumerable.Empty<T>().AsQueryable(); This method supports the LINQ to Entities infrastructure and is not intended to be used directly from your code
[英]Returning Enumerable.Empty<T>().AsQueryable() a bad idea?
這可能最好用一些代碼來解釋:
public IQueryable<DatabaseRecord> GetQueryableLinkedRecords()
{
if(this.currentlyHeldIds.Count() == 0)
{
return Enumerable.Empty<DatabaseRecord>().AsQueryable();
}
else
{
return from r in this.DBContext.DatabaseRecords
where this.currentlyHeldIds.Contains(r.Id)
select r;
}
}
這個想法是,如果沒有 currentHeldId 可供查詢,則沒有理由再次實際查詢數據庫。 如果 currentHeldIds 沒有值,LINQ 到 SQL 仍將查詢數據庫。 這種方法有什么問題嗎? 我意識到通常還有一些與返回 IQueryable 有關的其他問題,但是除了那些 arguments 之外,嘗試像這樣規避 db 調用有什么問題嗎?
我認為你應該重新考慮你的 function 實際上要做什么。 如果您返回IQueryable<T>
,則暗示調用者將存儲結果查詢,並在實際執行查詢時收到最新結果。 請記住:在這種情況下,數據庫實際上不會被查詢,直到在查詢中調用.ToList()
、 .ToArray()
、 foreach
等。
但是,如果您的目標是返回查詢的當前 state,那么您的方法應該只返回IList<T>
或類似的內容。 然后,您可以返回一個空的List<T>
,或者在您構建的查詢上調用.ToList()
並返回它。
一般來說,我會盡量避免返回空的可查詢對象,因為它會誤導調用者他們實際得到的東西。
對我來說似乎很好。 如果從消費端看功能是相同的,它應該是非常好的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.