这行返回什么样的对象?我怎样才能看到它的元数据来查看继承和方法呢?
IQueryable<Product> products = repository.Products
.OrderBy(p => p.ProductID)
.Skip((page - 1) * PageSize)
.Take(PageSize);
在调试模式中,我看到它返回以下对象:
System.Collections.Generic.List`1[SportsStore.Domain.Entities.Product].OrderBy(p => p.ProductID).Skip(3).Take(3)
发布于 2014-05-11 08:01:31
它并没有像你所假设的那样返回一个对象。它返回的是一个“查询”(一个实现IQueryable<Product>
的对象),它能够在调用代码调用foreach
时遍历并返回一组对象(类型为Product
)。在调用代码调用foreach
之前,它实际上不会处理查询。
您可以将它(返回对象)视为一组指令,说明如何处理、切片、骰子和筛选您开始使用的对象集(repository.Products
),并从该初始集生成一组新的对象。
在调用foreach
之前,代码实际上不会生成这个新集。如果您希望实际构建这个新集(因此您可以自己操作它或迭代它),那么您可以像@MotoSV所描述的那样在它上调用ToList()
。
List<Product> products = repository.Products
.OrderBy(p => p.ProductID)
.Skip((page - 1) * PageSize)
.Take(PageSize).ToList();
发布于 2014-05-11 07:59:05
它将类型为IQueryable
的Products
返回给Product
实例的集合。如果您想查看products
的内容,那么在LINQ语句上放置一个断点,跨过这一行,然后悬停在products
变量上,查看它的内容。
注意,您可能必须在LINQ语句的末尾执行一个ToList()
,以查看结果,因为它们可能尚未从您的存储库中返回。检查Take
方法是否“急切”加载结果。如果您的存储库是对象的集合,则不需要ToList
,但是如果您正在访问数据库,即通过实体框架访问数据库,那么它将是必需的。
https://stackoverflow.com/questions/23594686
复制相似问题