передать объект IIncludableQueryable в DbSet в ядре платформы сущностей - PullRequest
0 голосов
/ 01 мая 2020

Как я могу передать объекты типа IIncludableQueryable объекту DbSet<>? Тип IQueryable работает, но не IIncludableQueryable, при использовании Include и ThenInclude,

Метод испытаний должен принимать связанный элемент IIncludableQueryable (.Include().ThenInclude()).

Тест :

public IQueryable<TEntity> Test<TEntity>(DbSet<TEntity> dbSet, Expression<Func<IIncludableQueryable<TEntity, object>>> query) where TEntity : class => dbSet.Include(query);

Пример звонящего :

return Test<Site>(dbSet, .ThenInclude(app => app.Client)
            .ThenInclude(cl => cl.Country)
                .ThenInclude(co => co.Culture)
    .Include(st => st.App)
        .ThenInclude(app => app.ServiceType)
    .Include(st => st.CORSEntries)
    .Include(st => st.DataConnection)
    .Include(st => st.Features)
        .ThenInclude(ft => ft.Cultures)
            .ThenInclude(clt => clt.Culture)
    .Include(st => st.MetaEntries)
        .ThenInclude(mt => mt.Culture)
    .Include(st => st.Views)
        .ThenInclude(vw => vw.MetaEntries)
            .ThenInclude(mt => mt.Culture));

1 Ответ

0 голосов
/ 01 мая 2020

Я нашел решение после некоторого чтения.

public async Task<IQueryable<ISite>> Site(Expression<Func<Site, bool>> predicate)
{
    var query = this.DbSet.Include(st => st.App)
            .ThenInclude(app => app.Client)
                .ThenInclude(cl => cl.Country)
                    .ThenInclude(co => co.Culture)
        .Include(st => st.App)
            .ThenInclude(app => app.ServiceType)
        .Include(st => st.CORSEntries)
        .Include(st => st.DataConnection)
        .Include(st => st.Features)
            .ThenInclude(ft => ft.Cultures)
                .ThenInclude(clt => clt.Culture)
        .Include(st => st.MetaEntries)
            .ThenInclude(mt => mt.Culture)
        .Include(st => st.Views)
            .ThenInclude(vw => vw.MetaEntries)
                .ThenInclude(mt => mt.Culture)
        .Where(predicate);

    return await Exec(query);
}

base :

protected async Task<IQueryable<TImplementation>> Exec(IQueryable<TImplementation> query)
{
    return await query.ToQueryableAsync();
}

ToQueryableAsyn c расширение:

public static async Task<IQueryable<TSource>> ToQueryableAsync<TSource>(this IQueryable<TSource> source) where TSource : IAssetsBase
{
    var result = await source.ToListAsync();

    return result.AsQueryable();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...