У меня есть следующие классы:
public class Transfer
{
//some more properties
public virtual ICollection<TransferLineItem> TransferLineItem
}
public class TransferLineItem
{
public int EquipmentId { get; set; }
public virtual Equipment Equipment { get; set; }
}
Что я пытаюсь сделать, так это загрузить Transfer
со связанной с ним коллекцией TransferLineItem
, а также Equipment
, связанной с этим TransferLineItem
.
Я изменил свою функцию репо следующим образом:
public virtual async Task<TEntity> GetOneAsync<TEntity>(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> includes = null)
where TEntity : class
{
return await GetQueryable(filter: filter, includes: includes).SingleOrDefaultAsync();
}
protected virtual IQueryable<TEntity> GetQueryable<TEntity>(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
int? skip = null,
int? take = null,
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> includes = null)
where TEntity : class
{
IQueryable<TEntity> query = Context.Set<TEntity>();
if (includes != null)
{
query = includes(query); //includes.Aggregate(query, (current, include) => current.Include(include)).AsNoTracking();
}
if (filter != null)
{
query = query.Where(filter);
}
if (orderBy != null)
{
query = orderBy(query);
}
if (skip.HasValue)
{
query = query.Skip(skip.Value);
}
if (take.HasValue)
{
query = query.Take(take.Value);
}
return query;
}
Я попытался вызвать вышеуказанную функцию, как показано ниже, с использованием ThenInclude()
.
var primaryTransfer = await _repo.GetOneAsync<Transfer>(
filter: t => t.TransferId == transferId,
includes: source => source
.Include(t => t.TransferLink)
.Include(t => t.TransferLineItem)
.ThenInclude(t => t.Select(e => e.Equipment))
.Include(t => t.TransferScanItem)
.Include(t => t.TransferAggregate)
.Include(t => t.CompanyTransferType));
Думал, что это сработает, но получаю ошибку:
Лямбда-выражение, используемое внутри Include, недопустимо.
Как включить Equipment
?
.Include(t => t.TransferLineItem).ThenInclude(tli=>tli.Equipment)
- person Robert McKee   schedule 22.11.2019