2017-06-23 2 views
0

Je veux mettre en œuvre requête SelectMany() dans le modèle de référentiel générique Mon code est indiqué ci-dessous:Comment mettre en œuvre SelectMany dans Pattern Repository

var query = ctx.Storehouse.Where(x => x.Id == getId) 
        .SelectMany(x => x.Products).Select(x => new 
        { 
         x.Id, 
         . 
         ... 
        }).ToList(); 

Je dois changer les arguments pour la fonction suivante:

public virtual async Task<ICollection<TEntity>> ListOfFoo<TResult>(
     Expression<Func<TEntity, bool>> condition01, 
     Expression<Func<TEntity, TResult>> condition02, 
     Expression<Func<TEntity, TResult>> condition03) 
    { 
     return await Dbset.Where(condition01).SelectMany(condition02).Select(condition03).ToListAsync(); 
    } 

et obtenir erreur ci-dessous:

Error When use argument for condition02

Répondre

1
public Task<ICollection<TResult>> ListOfFooAsync<TEntity1, TEntity2, TResult>(
      Expression<Func<TEntity1, bool>> condition01, 
      Expression<Func<TEntity1, IEnumerable<TEntity2>>> condition02, 
      Expression<Func<TEntity2, TResult>> condition03) where TEntity1:class 
     { 
      return _context.Set<TEntity1>() 
          .Where(condition01) 
          .SelectMany(condition02) 
          .Select(condition03) 
          .ToListAsync(); 
     } 

Utilisation:

var list = await ListOfFooAsync<User, Category, CustomType1>(
      user => user.Id > 1, user => user.Categories, category => new CustomType1 
      { 
       Id = category.Id 
      });