这个linq语句可以重构为返回IQueryable吗?

时间:2010-02-14 05:09:02

标签: c# .net linq

我有以下linq扩展方法,它返回一个IEnumerable。这意味着,在linq语句的其余部分完成之前,这段代码最终会访问数据库。

是否有可能重构这个,所以它会返回一个IQueryable?

public static IEnumerable<TSource> WhereIf<TSource>
    (this IEnumerable<TSource> source, bool condition, 
     Func<TSource, bool> predicate)
{
    return condition ? source.Where(predicate) : source;
}

2 个答案:

答案 0 :(得分:1)

怎么样?

var queryable = source.AsQueryable();
return condition ? queryable.Where(predicate) : queryable;

Link

答案 1 :(得分:0)

以下内容如何:

public static IQueryable<TSource> WhereIf<TSource>
    (this IQueryable<TSource> source, bool condition, 
     Func<TSource, bool> predicate)
{
    return condition ? source.Where(predicate) : source;
}

如果你将IEnumerable改为IQueryable,那么source.Where在调用时也会返回一个IQueryable,并且看到源本身就是一个IQueryable,整个return语句在这两种情况下都会成功。