1

如果我没有错,我可以通过以下方式从数据库中获取数据:

  1. 首先使用 IEnumerable:

    myContext.MyTable.ToList();

  2. 使用 IQeryable:

    IQueryable<MyTable> query = myContext.Mytable;

我知道优点之一是IQueryable在服务器中执行条件,因此更高效、更快IEnumerable

但是在我的存储库中,当我返回一个列表时,我想知道这是否:

return query.ToList();

具有的优点IQueryable

4

1 回答 1

3

query.ToList()是一样的myContext.MyTable.ToList()。它返回内存中的一个集合(整个数据库表)并且只是一个IEnumerable<T>,而不是一个IQueryable<T>. 您附加的每个进一步的 LINQ 运算符(例如Where子句)都将在内存中执行,而不是在数据库中执行。

如果您选择从存储库返回IEnumerable<T>List<T>从存储库返回,则必须设计存储库方法,以便您可以在这些方法中应用过滤器、排序等 - 例如通过将过滤器和排序表达式作为参数传递给方法或通过创建批次用于不同用例的专用方法 - 例如GetOrdersByCustomerIdGetOrdersByShippingDate等等。如果您在调用存储库方法之外和之后执行此操作,您将遭受性能不佳的困扰。

于 2013-06-15T12:50:33.533 回答