簡體   English   中英

返回 Enumerable.Empty<t> ().AsQueryable() 一個壞主意?</t>

[英]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.

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