I have Project entity and ProjectDTO. I\'m trying to create an WebAPI controller method that can take and return ProjectDTOs and make it support OData.
The problem i
Something like this (I haven't tried to compile it)
using(var dataContext = new ORM_Context())
{
var projects = dataContext.Projects; // IQueryable
//Create a set of ODataQueryOptions for the internal class
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet("Project");
var context = new ODataQueryContext(
modelBuilder.GetEdmModel(), typeof(Project));
var newOptions = new ODataQueryOptions(context, Request);
var t = new ODataValidationSettings() { MaxTop = 25 };
var s = new ODataQuerySettings() { PageSize = 25 };
newOptions.Validate(t);
IEnumerable internalResults =
(IEnumerable)newOptions.ApplyTo(projects, s);
int skip = newOptions.Skip == null ? 0 : newOptions.Skip.Value;
int take = newOptions.Top == null ? 25 : newOptions.Top.Value;
var projectDTOs =
internalResults.Skip(skip).Take(take).Select(x =>
new ProjectDTO
{
Id = x.Id,
Name = x.Name
});
var projectsQueriedList = projectDtos.ToList();
var result = new ODataQueryResult(
projectsQueriedList, totalCount);
return result;
}