在一个小型Azure移动应用程序中,我在tablecontroller中使用了以下GET方法:
public IQueryable<User> GetAllUser()
{
return Query();
}
使用以下REST调用,我可以使用lastname ='Tiger'
查询用户GET: ~/userinfo?$filter=lastName%20eq%20'Tiger'
现在我想向我的用户添加一个组织字段,因此我将get方法更改为:
public IQueryable<UserDto> GetAllUser()
{
return Query().Select(u => new UserDto{FirstName=u.FirstName, LastName=u.LastName, Organisation="Acme"});
}
但现在,当我尝试使用相同的过滤器查询我的用户时:
GET: ~/userinfo?$filter=lastName%20eq%20'Tiger'
我收到了“错误请求”错误....
我怎样才能做到这一点......
任何帮助都将非常感谢....
答案 0 :(得分:1)
尝试:
public IQueryable<UserDto> GetAll()
{
return Query().AsEnumerable().Select(u =>
new UserDto
{
FirstName = u.FirstName,
LastName = u.LastName,
Organisation = "Acme"
}).AsQueryable();
}
您的 ODATA 查询将在DTO上使用,而不是实体。
您的控制器仍应使用TableController<User>
。
您也可以使用AutoMapper并执行:
return Query().ProjectTo<UserDTO>();
这将执行LINQ to Entities。
答案 1 :(得分:0)
你的帖子帮我解决了自己的问题!
据我所知,它不起作用,因为当你使用DTO对象和MappedEntityDomainManager时,this.Query()调用崩溃了。就我而言,我的Model和DTO对象都继承自Azure.Mobile.Server.EntityData。
基本上......使用MappedEntityDomainManager避免this.Query()
试试这个:
$conn = new PDO("mysql:host=".$mysql_host.";dbname=".$mysql_bd, $mysql_user, $mysql_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->exec($sql);
其中_context是您的DBContext而.User是您的用户DBSet