【发布时间】:2015-09-03 17:31:11
【问题描述】:
假设我需要一个扩展方法,它只选择来自不同来源的必需属性。源可以是数据库或内存中的集合。所以我定义了这样的扩展方法:
public IQueryable<TResult> SelectDynamic<TResult>(
this IQueryable<T> source,
...)
这适用于IQueryables。但是,我也必须为IEnumerables 调用此函数。
在这种情况下,我可以在.AsQueryable() 的帮助下调用它:
myEnumerable.AsQueryable()
.SelectDynamic(...)
.ToList();
两者都工作正常。如果两者都能正常工作,在哪些条件下我必须为同一目的创建两种不同的扩展方法,一种用于IEnumerable,另一种用于IQueryable?
如果是Queryable,我的方法必须向数据库发送查询。
例如这里是System.Linq命名空间内.Select扩展方法的来源:
我再次重复我的主要问题:
在Queryable 的情况下,我的方法必须向数据库发送查询,但在使用IEnumerable 时则不需要。现在,我使用AsQueryable() 作为可枚举项。因为,我不想为Enumerable 编写相同的代码。 会不会有一些副作用?
【问题讨论】:
-
其实,我认为这是一个很好的问题,因为似乎没有人知道 AsQueryable 的真正作用。
标签: c# .net linq ienumerable iqueryable