映射可观的位置,其中从dto到实体的子句



我有一个odata webapi方法如下:

        // GET: odata/Employees
    [EnableQuery]
    public IQueryable<DTOs.Employee> GetEmployees()
    {
        return this.AttemptOperation(context => 
            {
                IQueryable<DTOs.Employee> employees
                    = context.Employees.Project().To<DTOs.Employee>();
                return employees;
            });
    }

如果我不指定过滤器,它将数据返回到服务。但是,一旦我在URL中添加$ filter = employeeid eq'1',我会得到一个例外。

例外是我用于针对DynamoDB执行LINQ查询的AWS DynamoDB上下文库。但是,这表明上下文没有DTOS.Employee的表。

这当然很明显,上下文具有实体,而不是DTO。

如何获得从客户端指定的子句以转换回适当实体类型的iquybleable?

例如,客户端需要对dtos.employee..employeeid进行查询,并且需要转换为where子句,违反entities.employee.employeee.employee.

Easy:

public IQueryable<DTOs.Employee> GetEmployees()
{
    return this.AttemptOperation(context => 
        {
            // I commented here your old code:
            // IQueryable<DTOs.Employee> employees = context.Employees.Project().To<DTOs.Employee>();
            // This is our new code:
            var employees = context.Employees.Project()
            return employees.select(m=> new EmployeeDto {
                property1 = m.property1,
                property2 = m.property2
            }
        });
}

重要:您不能使用opproyeedto构造函数。禁止在linq。

下这样做

最新更新