У меня есть решение для веб-API с настроенной конечной точкой Odata, и оно работает довольно хорошо со всеми параметрами, кроме $ select.
, поэтому у меня есть расширение, написанное для поддержки Odata, и вот код,
private static QueryResult<T> Execute<T>(IQueryable<T> queryable, ODataQueryOptions<T> queryOptions)
{
try
{
var value = (queryOptions.ApplyTo(queryable) as IQueryable<T>); //here returns null
var result = value.ToList();
int? count = null;
if (queryOptions.Count != null && queryOptions.Count.Value)
{
var countQuery = queryOptions.ApplyTo(
queryable,
AllowedQueryOptions.Skip | AllowedQueryOptions.Top | AllowedQueryOptions.OrderBy
) as IQueryable<T>;
count = countQuery.Count();
}
var queryResult = new QueryResult<T>
{
Value = result,
Count = count.HasValue ? count.Value.ToString() : null
};
return queryResult;
}
catch (System.Exception ex)
{
throw;
}
}
Я передаю запрос в URL следующим образом:
https://localhost:44358/api/v2.0/data/clients?productId=bfe2e306-2471-455d-a2a3-4027522d5a20&$select=clientName