创建动态DTO

时间:2018-08-22 16:42:07

标签: c# asp.net-core dynamic asp.net-core-webapi

我正在尝试实现动态dto。首先,将有一个信息管理器,您可以在其中选择要由WebApi返回的字段。

稍后,您会在api中使用所需的DTO ID向端点发送请求。此方法将获取信息,在数据库中查询该信息,并获得集成了DTO(动态字段数)的字段:

   [Route("api/workers")]
    public IEnumerable<object> GetWorkers([FromRoute] string idEnterprise,int idDTO)
    {
        //lstDummyFields = _context.Dtos.Include("DtoFields").
           //Where(n=>n.idDto==idDTO).select(n=>n.DtoFields.name).ToList();

        //The property will look like this, the selected dto could have different properties(dynamic) but always call the same as the entity name fields
        List<string> lstDummyFields = new List<string>
        {
            "idWorker",
            "first_name",
            "last_name",
            "birthday",
            "adress"
        };

        dynamic dto = new ExpandoObject() as IDictionary<string,object>;
        foreach (var p in lstDummyProperty)
        {
            dto.Add(p, null);
        }


        return _context.workers.Where(n=>n.IdEnterprise==idEnterprise).select.(new { ???? }) .ToList();
    }

我不知道如何实现select子句。可能与此帖子相关,但其明显不同。

https://stackoverflow.com/a/34726946/2642777

我很接近答案,或者我走错路了?可以请一些帮助来解决这个问题。

2 个答案:

答案 0 :(得分:0)

我们不知道您的情况,也许使用Directory更好?但是您可以使用以下代码:

        List<string> lstDummyFields = new List<string>
        {
            "idWorker",
            "first_name",
            "last_name",
            "birthday",
            "adress"
        };

        dynamic dto = new ExpandoObject();
        foreach (var p in lstDummyFields)
        {
            ((IDictionary<String, Object>)dto).Add(new KeyValuePair<string, object>( p, null));
        }

答案 1 :(得分:0)

使用Restier。它是OData的包装(两行代码!),这意味着您可以使用以下方式调用API:

http://services.odata.org/v4/TripPinServiceRW/People?$top=2&$select=FirstName,LastName&$filter=Trips/any(d:d/Budget gt 3000)

这是动态查询,过滤器和字段选择。