2015-09-03 3 views
1

В небольшой Azure Mobile App, у меня есть следующий метод GET в tablecontroller:TableController и OData Запрос

public IQueryable<User> GetAllUser() 
    { 
     return Query(); 
    } 

с использованием следующего REST вызова, можно запросить пользователей с LastName = 'Tiger'

GET: ~/userinfo?$filter=lastName%20eq%20'Tiger' 

Теперь я хотел бы добавить организацию поля моего пользователя, поэтому я изменил способ добраться до:

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' 

Я получаю сообщение об ошибке «Bad Request» ....

Как я могу сделать эту работу ...

Любая помощь будет принята с благодарностью ....

+0

вы изменили функцию Определение GetAllUser? –

ответ

1

Try:

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 к Entities.

0

Ваше сообщение помогло мне решить мою собственную проблему!

Из того, что я могу сказать, это не сработает, потому что, когда вы используете объекты DTO и MappedEntityDomainManager, этот вызов call.Query() падает. В моем случае оба объекта Model и DTO наследуются от Azure.Mobile.Server.EntityData.

В принципе ... избежать this.Query() с MappedEntityDomainManager

Попробуйте это:

public IQueryable<UserDto> GetAllUser() 
{ 
    return _context.User.Select(u => new UserDto{FirstName=u.FirstName, LastName=u.LastName, Organisation="Acme"}); 
} 

где _context ваш DbContext и .user Ваш Пользователь DBSet

Смежные вопросы