假设我需要一个扩展方法,它可以从不同的来源仅选择所需的属性。这些来源可以是数据库或内存集合。因此,我定义了这样的扩展方法:
public IQueryable<TResult> SelectDynamic<TResult>(
this IQueryable<T> source,
...)
这对于 IQueryable
没问题。但是,我还需要为 IEnumerable
调用此函数。
在这种情况下,我可以借助 .AsQueryable()
来调用它:
myEnumerable.AsQueryable()
.SelectDynamic(...)
.ToList();
两种方法都能正常工作。如果两种方法都能正常工作,在什么情况下我需要为相同的目的创建两个不同的扩展方法,一个用于IEnumerable
,另一个用于IQueryable
?我的方法必须在使用
Queryable
时向数据库发送查询。例如,这是
System.Linq
命名空间中.Select
扩展方法的源代码:
我再次重申我的主要问题:
我的方法必须在使用Queryable
时向数据库发送查询,但在使用IEnumerable
时则不需要。现在,我正在对枚举使用AsQueryable()
。因为我不想为Enumerable
编写相同的代码。这样会有什么副作用吗?