我有一个 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 '1' 添加到 URL,我就会得到一个异常。
异常来 self 用于对 DynamoDB 执行 LINQ 查询的 AWS DynamoDB 上下文库。但是,它表示上下文没有 DTOs.Employee 的表。
这当然很明显,上下文有实体,而不是 DTO。
我怎样才能让客户端指定的 IQueryable where 子句转换回正确的实体类型?
例如,客户端需要针对 DTOs.Employee.EmployeeID 进行查询,并且需要将其转换为针对 Entities.Employee.EmployeeID 的 where 子句。
最佳答案
简单:
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下禁止这样做。
关于c# - 将 IQueryable where 子句从 DTO 映射到实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249610/