在C#DAL中,如果我返回IQueryable而不是IList,我将获得什么样的优势,Iam不使用Entity Framework / N Hibernate,只是普通的旧ADO.Net ..
答案 0 :(得分:1)
IQueryable的优点很多:
来电者可以添加过滤器,分页,排序等。
从DAL返回IQueryable 的缺点很重要:
您已基本打破了DAL和UI之间关注点的分离,并使DAL的单元测试更加困难。
您已将DAL暴露给性能问题(例如,UI程序员在不应该的位置添加排序)
如果您需要超出DAL的额外控制,您可以向界面添加选项,或者不太好的想法是返回IList的IQueryable以限制UI代码可以执行的操作。
答案 1 :(得分:1)
您可以继续查询IQueryable。 IQueryable不适用于您的最终返回类型,但适用于基于原始查询的私有帮助程序 - 可重用,可组合的查询,其IQueryable<>中具有预期返回类型的基础类型。
答案 2 :(得分:0)
我相信返回IQueryable允许延迟枚举,而返回IList则不会。
如果返回IList,则在DAL返回IList时执行针对数据库的查询。返回IQueryable,可以传递返回值,只有在检查IQueryable的内容时才会执行查询。
(这是基于我对LINQ to SQL的经验 - 但是我没有根据权威来源对此进行检查)
答案 3 :(得分:-1)
您应该返回IEnumerable而不是IList或IQueryable:
IQueryable 让调用者认为他们可以使用延迟评估并添加过滤器,排序,投影等。
IList 允许调用者添加,删除,反转,设置值,以及修改返回的集合。这对您来说可能不是问题,但如果您计划在呼叫之间共享数据,那么您需要注意这个
IEnumerable 为调用者提供了一个不可变的集合,他们知道这些集合不支持延迟评估。