我相信返回IQueryable允许延迟枚举,而返回IList则不行。如果您返回一个IList,则对数据库的查询在DAL返回IList时执行。返回一个IQueryable,可以传递返回值,并且仅在检查IQueryable的内容时才执行查询。(这是基于我使用LINQ到SQL的经验,但我没有根据权威来源进行验证)
您可以继续针对IQueryable进行查询。IQueryable不是您最终的返回类型,而是用于构建原始查询的私有帮助程序,这些帮助程序是可重用的、可组合的查询片段,其预期返回类型为IQueryable<>中基础类型的返回类型。
你应该返回一个IEnumerable而不是IList或IQueryable:IQueryable会让调用者认为他们可以使用惰性评估和添加过滤器、排序、投影等功能。IList允许调用者添加、删除、反转、设置值和修改返回的集合。这对你可能不是问题,但如果你计划在调用之间共享数据,那么你需要注意这一点。IEnumerable为调用者提供了一个不可变的集合,他们知道它不支持惰性评估。