Lambda表达式选择对象及其集合,其中集合仅包含活动项

时间:2017-09-18 13:59:04

标签: c# lambda

我想选择包含其集合的对象,此集合必须只包含其他项目。

这是电话:

EntityResult<TEntity> = SelecFor( LAMBDA_EXPRESSION , "NameOfCollectionPropertyToInclude");

我知道我可以在存储库层级查询它,但如果可能的话我想在这里执行

这是方法:

public virtual EntityResult<TEntity> SelectFor(Expression<Func<TEntity, bool>>, params string[] entitiesToLoad)
{}

1 个答案:

答案 0 :(得分:0)

我们的想法是,您将实体投射到IQueryable,然后包含实体,然后过滤。

public async Task<TEntity> SingleOrDefaultAsyncEager(Expression<Func<TEntity, bool>> filter, params Expression<Func<TEntity, object>>[] includes)
    {
        var query = _context.Set<TEntity>().AsQueryable();
        if (includes != null)
        {
            query = includes.Aggregate(query, (current, include) => current.Include(include));
        }
        return await query.SingleOrDefaultAsync(filter);
    }

第二个表达式允许您传递lambda。 ES:

repository.SingleOrdDefaultAsyncEager(x=> x.Id == 5, y=> y.collection);