2009-05-29 17 views
5

Sto utilizzando il vecchio provider linq per nHibernate e aspetto pazientemente affinché il nuovo esca. Sono sicuro che mi salverà molto dolore. In ogni caso, ho un problema con il codice qui sotto in quanto genera un "Oggetto riferimento non impostato su un'istanza di un oggetto". La riga "c.Disciplines.Any (d => discipline.Contains (d))" è quella che causa il problema . C'è qualche problema con una dichiarazione come questa usando nHibernate Linq?nhibernate Linq

var agencies = m_AgencyRepository.Linq; 

Discipline[] disciplines = user.Disciplines.ToArray<Discipline>(); 

return (from c in agencies 
        where (String.IsNullOrEmpty(criteria.AgencyName) || c.AgencyName.Contains(criteria.AgencyName)) 
        && (criteria.AgencyType == null || c.AgencyType.AgencyTypeId == criteria.AgencyType) 
        && (String.IsNullOrEmpty(criteria.AgencyLevel) || c.AgencyLevel.AgencyLevelId == criteria.AgencyLevel) 
        && (c.Disciplines.Any(d => disciplines.Contains(d))) 
select c) 

dello stack:

at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetEntityName(ICriteria subcriteria, String propertyName) 
    at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetType(ICriteria subcriteria, String propertyName) 
    at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetTypeUsingProjection(ICriteria subcriteria, String propertyName) 
    at NHibernate.Criterion.InExpression.GetTypedValues(ICriteria criteria, ICriteriaQuery criteriaQuery) 
    at NHibernate.Criterion.Junction.GetTypedValues(ICriteria criteria, ICriteriaQuery criteriaQuery) 
    at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetQueryParameters() 
    at NHibernate.Criterion.SubqueryExpression.InitializeInnerQueryAndParameters(ICriteriaQuery criteriaQuery) 
    at NHibernate.Criterion.SubqueryExpression.ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters) 
    at NHibernate.Criterion.Junction.ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters) 
    at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition(IDictionary`2 enabledFilters) 
    at NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor(IOuterJoinLoadable persister, CriteriaQueryTranslator translator, ISessionFactoryImplementor factory, CriteriaImpl criteria, String rootEntityName, IDictionary`2 enabledFilters) 
    at NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable persister, ISessionFactoryImplementor factory, CriteriaImpl rootCriteria, String rootEntityName, IDictionary`2 enabledFilters) 
    at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results) 
    at NHibernate.Impl.CriteriaImpl.List(IList results) 
    at NHibernate.Impl.CriteriaImpl.List() 
    at NHibernate.Impl.CriteriaImpl.UniqueResult() 
    at NHibernate.Linq.Visitors.ImmediateResultsVisitor`1.HandleAggregateCall(MethodCallExpression call) 
    at NHibernate.Linq.Visitors.ImmediateResultsVisitor`1.VisitMethodCall(MethodCallExpression call) 
    at NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp) 
    at NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression exp) 
    at NHibernate.Linq.Visitors.ImmediateResultsVisitor`1.GetResults(MethodCallExpression expr) 
    at NHibernate.Linq.Visitors.RootVisitor.HandleImmediateResultsCall(MethodCallExpression call) 
    at NHibernate.Linq.Visitors.RootVisitor.VisitMethodCall(MethodCallExpression expr) 
    at NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp) 
    at NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression exp) 
    at NHibernate.Linq.Visitors.NHibernateQueryTranslator.Translate(Expression expression, QueryOptions queryOptions) 
    at NHibernate.Linq.NHibernateQueryProvider.Execute(Expression expression) 
    at NHibernate.Linq.QueryProvider.System.Linq.IQueryProvider.Execute[T](Expression expression) 
    at System.Linq.Queryable.Count[TSource](IQueryable`1 source) 
    at PPSS.Services.AgencyRepository.List(AgencyListCriteria criteria, Int32& total) in C:\Development\PPSS\PPSS.Services\Services\Agency\AgencyRepository.cs:line 57 
    at PPSS.Models.AgencyViewData..ctor(AgencyListCriteria criteria) in C:\Development\PPSS\PPSS\Domains\Maintenance\ViewModels\AgencyViewData.cs:line 26 
    at PPSS.Controllers.AgencyController.Index(AgencyListCriteria criteria) in C:\Development\PPSS\PPSS\Domains\Maintenance\Controllers\AgencyController.cs:line 34 
    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__DisplayClassa.<InvokeActionMethodWithFilters>b__7() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
+0

Stai dicendo che "c.Disciplines.Any (d => discipline.Contains (d))" è il tuo problema perché la sua rimozione comporta il mancato ottenimento dell'errore, o perché è riportato il numero di riga? –

+0

Ancora nessuna soluzione? – Bertvan

risposta

1

Hai provato controllando che c.Disciplines non è nullo prima di fare una qualsiasi su di esso? Presumibilmente disciplines non è nullo, ma è anche possibile verificarlo.

(c.Disciplines != null 
    && c.Disciplines.Any(d => disciplines != null 
           && disciplines.Contains(d))) 
+0

Sì, l'ho provato. – Craig

5

Change

user.Disciplines.ToArray<Discipline>() 

a

user.Disciplines.ToList<Discipline>() 

NHibernate capisce .Contains() invita concreti List oggetti.

Problemi correlati