- dotnet 5 and the use of system.text.json might be able to use internal clases of converts for all those types here.
- Dominant language
- C#
- Stars
- 3
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
annoying that we have to serialize them ourself\.
https://github.com/EAVFW/EAVFramework/blob/75ddb9cfd84b42eb6b7d3de698baa812a91139fb/src/DynamicContext.cs#L245-L246
```csharp
else
{
var converter = _factory.CreateConverter(item.GetType());
var result = converter.Convert(item, queryContext);
resultList.Add(result.Value);
}
}
var odatafeature = request.ODataFeature();
return new PageResult(resultList, null, odatafeature.TotalCount);
// return metadataQuerySet;
// var setMethod=typeof(DbContext).GetMethod("Set", new Type[] { });
// return setMethod.MakeGenericMethod(type.dto).Invoke(this,new object[] { }) as IQueryable;
// return Set();
}
public static async Task> ExecuteOData(IServiceProvider serviceProvider, IODataFeature odataFeature, string query, Type type, TContext context, IQueryable metadataQuerySet) where TContext : DynamicContext
{
List> queryInspectors = GetQueryInspectors(serviceProvider);
var queryCol = QueryHelpers.ParseNullableQuery(query);
var request = new ODataFakeHttpRequest()
{
Query = new QueryCollection(queryCol),
QueryString = new QueryString("?" + query.TrimStart('?')),
HttpContext =
{
RequestServices = serviceProvider
}
};
request.HttpContext.Features.Set(odataFeature);
var queryContext = new QueryContext
{
Type = type,
Request = request,
SkipQueryExtenders = queryInspectors.ToDictionary(x => x, v => false),
Context = context
};
foreach (var queryInspector in queryInspectors.Where(q => !queryContext.SkipQueryExtenders[q]))
metadataQuerySet = queryInspector.ApplyTo(metadataQuerySet, queryContext).Cast(type) ?? metadataQuerySet;
if (!queryCol.ContainsKey("$select") && !queryCol.ContainsKey("$apply"))
{
request.QueryString = request.QueryString.Add("$select", string.Join(",", type.GetProperties().Where(p => p.GetCustomAttribute() != null && p.GetCustomAttribute() == null).Select(p => p.GetCustomAttribute().Name)));
request.Query=new QueryCollection(QueryHelpers.ParseNullableQuery(request.QueryString.Value));
}
var odataContext = new ODataQueryContext(context.Manager.Model, type, new Microsoft.OData.UriParser.ODataPath());
// IODataFeature odataFeature = request.HttpContext.ODataFeature();
odataFeature.RoutePrefix = "/api/";
odataContext.DefaultQueryConfigurations.EnableFilter = true;
odataContext.DefaultQueryConfigurations.EnableExpand = true;
odataContext.DefaultQueryConfigurations.EnableSelect = true;
odataContext.DefaultQueryConfigurations.EnableCount = true;
odataContext.DefaultQueryConfigurations.EnableSkipToken = true;
var odata = new ODataQueryOptions(odataContext, request);
metadataQuerySet = odata.ApplyTo(metadataQuerySet);
var items = await ((IQueryable) metadataQuerySet).ToListAsync();
//TODO - dotnet 5 and the use of system.text.json might be able to use internal clases of converts for all those types here.
//annoying that we have to serialize them ourself.
var resultList = new List();
var _factory = request.HttpContext.RequestServices.GetRequiredService();
foreach (var item in items)
{
if (item is DynamicEntity)
{
resultList.Add(item);
}
else
{
var converter = _factory.CreateConverter(item.GetType());
var result = converter.Convert(item, queryContext);
resultList.Add(result.Value);
}
}
return new PageResult(resultList, null, odataFeature.TotalCount);
// return metadataQuerySet;
// var setMethod=typeof(DbContext).GetMethod("Set", new Type[] { });
// return setMethod.MakeGenericMethod(type.dto).Invoke(this,new object[] { }) as IQueryable;
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.