Проблема начинается с этой строки. IQueryable создает запрос SQL, поэтому:
.Select(x => new BUViewModel(x))
Iqueryable не может вызывать конструкторы. Чтобы исправить это, сделайте это вручную.
.Select(x=> new BUViewModel(){
Id = x.Id,
Name = x.Name // etc
})
Но почему конструктор не работает? Потому что вы можете написать любой код, который вы будете sh в конструкторе. EF не сможет перевести на него SQL Запрос. Допустим, вы можете написать конструктор, подобный этому.
public BUViewModel(int id){
var apiToken = _serviceCallApi(id);
}
Приведенный выше пример вызывает API, когда он создает объект (это просто пример). Невозможно перевести эту логику c на запрос. Существуют такие инструменты, как automapper, которые могут автоматически отображать объекты.
Полагаю, вы просто имели дело не с IQueryable, а с IEnumarable. Что неверно, потому что вы хотите, чтобы SQL отфильтровал данные для вас. Не загружать все в память.