3

次のパラメーターを期待するメソッドがあります。

public IQueryable<TEntity> GetAllIncluding(params Expression<Func<TEntity, object>>[] includeProperties)
{
    foreach (var includeProperty in includeProperties)
    {
        dbSet.Include(includeProperty);
    }
    return dbSet;
}

パラメータを渡す方法は次のとおりです。

IQueryable<User> users = repo.GetAllIncluding(u => u.EmailNotices, u => u.EmailTemplatePlaceholders, u => u.Actions);

ただし、特定の条件を渡すかどうかを確認する必要があります。

たとえば、変数がある場合useEmailNotices = falseは渡したくありませんEmailNoticesが、そうであれば渡しtrueます。3つすべてに対してこれを行う必要があります。これを行うには長い道のりがあることは知っていますが、1行の短い方法またはパラメータービルダー関数またはその性質の何かがあることを望んでいました.

4

2 に答える 2

4

メソッドの署名をに変更するのはどうですか

public IQueryable<TEntity> GetAllIncluding(IEnumerable<Expression<Func<TEntity, object>>> includeProperties)

条件ロジックを別の場所で定義する

var args = new List<Expression<Func<TEntity, object>>>();
if (useEmailNotices)
    args.Add(u => u.EmailNotices);

そして、次のようなメソッドを呼び出すだけです

IQueryable<User> users = repo.GetAllIncluding(args);
于 2014-02-14T16:38:24.687 に答える
2

Params の代わりに、List<T>渡したい実際のエンティティで宣言された を使用します。

var funcList = new List<Expression<Func<User, object>>>();

funcList.add(u => u.EmailTemplatePlaceholders);

if (useEmailNotices)
    funcList.add(u => u.EmailNotices);

メソッドのシグネチャは次のようになります。

public IQueryable<TEntity> GetAllIncluding(List<Expression<Func<TEntity, object>> includeProperties)
{
    foreach( ... )
}
于 2014-02-14T16:40:49.133 に答える