IQueryable <t>优于IList <t> </t> </t>的优点

时间:2010-12-14 21:22:12

标签: c# linq generics

在C#DAL中,如果我返回IQueryable而不是IList,我将获得什么样的优势,Iam不使用Entity Framework / N Hibernate,只是普通的旧ADO.Net ..

4 个答案:

答案 0 :(得分:1)

IQueryable的优点很多:

来电者可以添加过滤器,分页,排序等。

从DAL返回IQueryable 的缺点很重要:

您已基本打破了DAL和UI之间关注点的分离,并使DAL的单元测试更加困难。

您已将DAL暴露给性能问题(例如,UI程序员在不应该的位置添加排序)

如果您需要超出DAL的额外控制,您可以向界面添加选项,或者不太好的想法是返回IList的IQueryable以限制UI代码可以执行的操作。

答案 1 :(得分:1)

您可以继续查询IQueryable。 IQueryable不适用于您的最终返回类型,但适用于基于原始查询的私有帮助程序 - 可重用,可组合的查询,其IQueryable&lt;&gt;中具有预期返回类型的基础类型。

答案 2 :(得分:0)

我相信返回IQueryable允许延迟枚举,而返回IList则不会。

如果返回IList,则在DAL返回IList时执行针对数据库的查询。返回IQueryable,可以传递返回值,只有在检查IQueryable的内容时才会执行查询。

(这是基于我对LINQ to SQL的经验 - 但是我没有根据权威来源对此进行检查)

答案 3 :(得分:-1)

您应该返回IEnumerable而不是IList或IQueryable:

IQueryable 让调用者认为他们可以使用延迟评估并添加过滤器,排序,投影等。

IList 允许调用者添加,删除,反转,设置值,以及修改返回的集合。这对您来说可能不是问题,但如果您计划在呼叫之间共享数据,那么您需要注意这个

IEnumerable 为调用者提供了一个不可变的集合,他们知道这些集合不支持延迟评估。