2017-05-26 42 views
0

我有一個Customer類運行時客戶可以有幾個Address如何生成若干包括()在一個倉庫

在我的倉庫我有這樣的:

protected DbSet<T> Table; 

而且這種方法:

public T Find<TIncludeField>(Expression<Func<T, bool>> where, 
    Expression<Func<T, TIncludeField>> include) 
    => Table.Where(@where).Include(include).FirstOrDefault(); 

然後我可以像這樣使用它:

_customerRepo.Find(x => x.Reference.ToLower() == reference.ToLower(), x => x.Addresses); 

我希望能夠做到這一點:

public T Find<TIncludeField>(Expression<Func<T, bool>> where, 
    Expression<Func<T, ICollection<TIncludeField>>> includes) 
    => Table.Where(@where).Include(includes).FirstOrDefault(); 

但我不知道如何在運行時創建的.Include(includes)

任何想法名單?

基於:Philip Japikse Code

感謝,

回答

0

你可以試試這個擴展方法

public static IQueryable<T> IncludesAll<TIncludeField>(this IQueryable<T> query, 
IEnumerable<Expression<Func<T, TIncludeField>>> includes) 
{ 
    foreach (var include in includes) 
    { 
     query = query.Include(include); 
    } 

    return query; 
} 
+0

Th只允許您在屬性相同的情況下包含屬性。 –

0

我建議使用這一個(這將讓你包括不同類型的屬性,參數陣列允許你指定零,一個或多個包括)

public static IQueryable<T> IncludesAll<T>(this IQueryable<T> query, 
params Expression<Func<T, object>>[] includes) 
{ 
    foreach (var include in includes) 
    { 
     query = query.Include(include); 
    } 

    return query; 
} 
相關問題