#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#