在linq中返回选择查询的最佳实践

时间:2012-03-15 01:40:20

标签: c# linq ado.net-entity-data-model

我对下面列表中的内容有点困惑,在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 个答案:

答案 0 :(得分:4)

您应该返回IQueryable<T> 这允许消费者在不将您的接口耦合到EF的情况下向SQL查询添加投影。

答案 1 :(得分:0)

您应该始终返回限制最少的数据类型。它允许将来最大的灵活性并减少耦合。

根据您所拥有的体系结构,如果您可能想要进行LINQ链接,则可能是IQueryable<T>。或者您可以将强类型对象(如DTO)的集合作为IEnumerable<T>返回。

IEnumerable非常适合处理内存中迭代的序列,但IQueryable允许内存不足的内容,例如数据库或Web服务。

答案 2 :(得分:0)

这取决于相关数据的大小以及您将使用它做什么。 IQueryable允许稍后修改查询,但对于具有复杂查询的大型数据集,它可能导致性能大幅下降。在这样的情况下,我更喜欢返回列表并避免进一步的麻烦,但如果你选择坚持使用IQueryable,你必须确保在没有巨大性能命中的情况下进行评估。