2

在我的存储库中,我发现来自该线程的 WhereIf Linq-to-sql 扩展(LINQ to SQL Where Clause Optional Criteria)非常有用——尤其是 IEnumerable 版本。

我想对 Include() 语句做同样的事情,但我不太擅长编写扩展。我被困在扩展的声明上。

谁能帮我将 WhereIf 扩展移植到 IncludeIf?

4

1 回答 1

3

有两种Include(...),一种已经是 to 的扩展方法IQueryable<T>,另一种是 的方法DbQuery<T>。这应该给你两个扩展IncludeIf<>

public static class QueryableEx
{
    public static IQueryable<T> IncludeIf<T, TProperty>(this IQueryable<T> source, bool condition, Expression<Func<T, TProperty>> path) where T : class
    {
        if (condition)
        {
            return source.Include(path);
        }
        else
        {
            return source;
        }
    }

    public static DbQuery<TResult> IncludeIf<TResult>(this DbQuery<TResult> query, bool condition, string path)
    {
        if (condition)
        {
            return query.Include(path);
        }
        else
        {
            return query;
        }            
    }
}

请记住,您需要像我所做的那样将它们放在静态类中。

于 2013-08-15T17:58:16.517 回答