Как правильно преобразовать ODataQueryOptions в IQueryable при использовании expand?

#c# #asp.net-core #odata #asp.net-core-webapi #.net-5

Вопрос:

У меня есть проект, написанный с использованием C# в верхней части ASP.NET Структура Core/5. Я пытаюсь использовать OData, чтобы позволить пользователям запрашивать мой WebAPI. Вот одна конечная точка, где я хочу, чтобы пользователь мог получить первые соответствующие записи

 public C2BaseController<TModel> : BaseController
{
    protected DbSet<TModel> EntityDbSet { get; private set;}

    public C2BaseController(DbContext context)
    {
        EntityDbSet = context.Set<TModel>;
    }
    
    public async Task<ActionResult<TModel>> SingleAsync()
    {
        var settings = new ODataValidationSettings()
        {
            AllowedFunctions = AllowedFunctions.AllFunctions,
            AllowedQueryOptions = AllowedQueryOptions.All,
        };

        ODataQueryOptions<TModel> queryOptions = Request.GetODataQueryOptions<TModel>();

        queryOptions.Validate(settings);

        // This works great if Expand() is not used
        var query = queryOptions.ApplyTo(EntityDbSet) as IQueryable<TModel>;

        TModel model = await query.FirstOrDefaultAsync();

        return model;
    }
}
 

Приведенный выше код по большей части работает так, как и должен работать. Однако, когда пользователь запрашивает расширение свойства, строка queryOptions.ApplyTo(EntityDbSet) as IQueryable<TModel> возвращает значение null.

Когда пользователь запрашивает расширение отношения, queryOptions.ApplyTo(EntityDbSet) оно не может быть приведено IQueryable<TModel> .

Как я могу правильно выполнить приведение ODataQueryOptions<T> к IQueryable<T> при использовании расширения, чтобы я мог запросить базу данных?

Комментарии:

1. Полезна ли вам эта статья ? Преобразование функций ODataQueryOptions в выражения LINQ в C#