我的 BLL 中有一些方法可以从数据库中获取一些记录并将其传递给 UI 以绑定到 GridviewIQueryable<t>
或Ilist<t>
.
我的问题是哪一个更适合我,为什么?其实我不知道这两种类型之间的区别,我不知道哪一种最适合哪种情况?
谢谢
我的 BLL 中有一些方法可以从数据库中获取一些记录并将其传递给 UI 以绑定到 GridviewIQueryable<t>
或Ilist<t>
.
我的问题是哪一个更适合我,为什么?其实我不知道这两种类型之间的区别,我不知道哪一种最适合哪种情况?
谢谢
不同之处在于它IList<T>
代表了一个实际的结果列表。它将被“物化”——从数据库中提取到内存中。(理论上它当然只是一个接口 - 它仍然可以推迟一切......)
IQueryable<T>
代表一个查询- 例如,您仍然可以在之后编写额外的查询位。然后,您可以通过询问结果来评估查询。这将使用延迟执行,仅在实际需要时才请求结果。
至于你应该返回哪个......如果你只是要直接绑定到 UI,将它转换为列表可能很有意义,这样你就可以更好地控制查询的实际执行时间。另一方面,如果您希望能够调整查询,使用IQueryable<T>
将给调用者更多的灵活性。
我建议 ICollection 或 IList
IQueryable - 提供针对数据类型已知的特定数据源评估查询的功能。
您可以随时调用 ICollection.AsQueryable()。