У меня есть этот кусочек кода
IQueryable<Dealer> dealers =
from dealer in Dealers
join address in AddressesUS on dealer.DealerId equals address.OwnerId
where dealer.Country == country && address.Owner == (int)Contact.OwnerType.Dealer
select new Dealer()
{
DealerId = dealer.DealerId,
DealerName = dealer.DealerName,
Country = dealer.Country,
Email = dealer.Email,
Contact = dealer.Contact,
Url = dealer.Url,
IsActive = dealer.IsActive,
IsWholesale = dealer.IsWholesale,
Address = address == null ? null : address
};
Когда я выполняю его (вызывая ToArray или что-то еще), я получаю эту ошибку: System.InvalidCastException: Неверное приведение из 'System.String' к '***. Model.Address'
Теперь, если я изменю адрес Dealer.Address на тип string, код не скомпилируется, как я ожидал, потому что он действительно должен иметь тип AddressUS: Address. Однако, если я изменил тип Dealer.Address на object и запустил код, я увидел, что SubSonic заполнил его первым строковым столбцом из DB. И.Е. dealerr.Address = "123 поддельных ул." В БД нет никакого отношения к дилеру и адресу, поэтому я не уверен, что это изменит.
Я использую .Net 3.5 и MySql 5.
Вот трассировка стека
at System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
at System.String.System.IConvertible.ToType(Type type, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType)
at SubSonic.Extensions.Objects.ChangeTypeTo(Object value, Type conversionType)
at SubSonic.Extensions.Database.Load[T](IDataReader rdr, T item, List`1 ColumnNames)
at SubSonic.Extensions.Database.ToEnumerable[T](IDataReader rdr, List`1 ColumnNames)
at SubSonic.Linq.Structure.DbQueryProvider.Execute[T](QueryCommand`1 query, Object[] paramValues)
at lambda_method(ExecutionScope )
at SubSonic.Linq.Structure.DbQueryProvider.Execute(Expression expression)
at SubSonic.Linq.Structure.QueryProvider.System.Linq.IQueryProvider.Execute(Expression expression)
at SubSonic.Linq.Structure.Query`1.GetEnumerator()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at InSite.Controllers.DealerController.GetDealers() in ***Controllers\DealerController.cs:line 25
at lambda_method(ExecutionScope , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)