2012-03-15 17 views
0

我對以下列表中的什麼在linq中返回select中使用什麼感到困惑。返回linq中的select查詢的最佳實踐

1.IEnumerable 2.List 3.ObjectQuery 4. ConvertLinqtoDataTable

你喜歡哪一種?

目前我們在返回記錄時使用了objectquery。

public ObjectQuery StationSelectByStationId(int stationid) 
    { 
     var query = from station in _iiqrEntities.Station 
        where station.StationId == stationid 
        select station; 

     return query as ObjectQuery; 
    } 

我會用你的建議,以便我們將規範我們的代碼。 請根據我上面的代碼參考您的答案。

致謝問候

回答

3

您應該退回IQueryable<T>
這使消費者可以將投影添加到SQL查詢中,而無需將您的界面耦合到EF。

1

您應該始終返回您可以限制最少的數據類型。它允許將來具有最大的靈活性並減少耦合。

根據你有的架構,如果你想要做LINQ鏈接,這可能是一個IQueryable<T>。或者您可以返回一組強類型對象,例如DTO's,作爲IEnumerable<T>

IEnumerable非常適合在內存中迭代的序列,但IQueryable允許內存不足的情況,如數據庫或Web服務。

+0

否; 'IQueryable'。這允許SQL鏈接。 – SLaks 2012-03-15 01:44:28

+0

@SLaks:是的,這是正確的。讓我編輯我的答案,以更具體。 – msigman 2012-03-15 01:45:36

0

這取決於有問題的數據大小以及您將如何處理它。 IQueryable確實允許稍後修改查詢,但對於具有複雜查詢的大型數據集,它可能導致性能下降較大。在這種情況下,我寧願返回一個列表並避免進一步頭痛,但是如果選擇堅持使用IQueryable,則必須確保在沒有巨大性能命中的情況下對其進行評估。