我的代碼問題LINQ的加入(亞音速)
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:從「系統無效轉換。字符串'到'***。Model.Address'
現在,如果我將Dealer.Address更改爲鍵入字符串,則代碼無法按我的預期進行編譯,因爲它確實應該是AddressUS:Address類型。但是,如果我將Dealer.Address的類型更改爲對象並運行代碼,我會看到SubSonic使用來自DB的第一個字符串列填充它。 I.E. dealer.Address =「123假聖」經銷商和地址在DB中沒有關係,所以我不確定這是否會有所作爲。
我使用的.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)
「address == null」是什麼? null:地址與「地址」不同? – Gabe 2010-08-21 02:28:49
它不是,這是從我嘗試做address = address == null時遺留的代碼? null:new AddressUS {...} – Peijen 2010-08-23 16:32:05