我有一个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;
});
}
如果我没有指定过滤器,它会将数据返回给服务。 但是只要我添加$ filter = EmployeeID eq&#39; 1&#39;到URL我得到一个例外。
例外来自我用于对DynamoDB执行LINQ查询的AWS DynamoDB上下文库。但是,它表明上下文没有DTOs.Employee的表格。
这当然是显而易见的,上下文有实体,而不是DTO。
如何从客户端指定IQueryable where子句转换回正确的实体类型?
例如,客户端需要查询DTOs.Employee.EmployeeID,它需要转换为针对Entities.Employee.EmployeeID的where子句。
答案 0 :(得分:0)
易:
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
}
});
}
重要:您不能使用EmployeeDto构造函数。在Linq下禁止这样做。