Вы сможете выполнить это, используя LINQKit для встраивания своего выражения в дерево выражений.
http://www.albahari.com/nutshell/linqkit.aspx
Это приведет к тому, что конкатенация, которую вы пытаетесь запустить наSQL Server, а не в памяти (как описано в другом ответе).Конечно, SQL Server знает, как объединять строки, но если ваш AddressConstructor сделал что-то еще, чего не понимает SQL Server, то этот подход не сработает, и вам действительно нужно будет выполнить свой пользовательский метод в памяти, используя подход, описанный в другомответ.
По существу, LINQKit сгладит дерево, чтобы оно фактически выполнялось как:
var Test = _db.MyTableTest.Select( t => new ViewModel
{
MyID = t.ID,
StringAddress = t.Addr.City + "," + t.Addr.Province
};
, который EF не должен иметь проблем при выполнении (и конкатенация должна происходить на SQL Server).