1
I am trying to return the amount of objects that a query will return.
If I execute the following command:
query.ToList().Count
The value is returned successfully, but I execute the following command:
query.Count()
The following error is returned:
'query.Count()' threw an exception of type 'NHibernate.Hql.Ast.ANTLR.QuerySyntaxException'
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146232832
HelpLink: null
InnerException: null
Message: "A recognition error occurred. [.Count[Admin.CD_MercadoLivre+ProdutosMercadoLivre](.Select[DSi.Dominio.Entidades.TAB_Produto,Admin.CD_MercadoLivre+ProdutosMercadoLivre](.Where[DSi.Dominio.Entidades.TAB_Produto](NHibernate.Linq.NhQueryable`1[DSi.Dominio.Entidades.TAB_Produto], Quote((prod, ) => (AndAlso(Equal(prod.IntegraMercadoLivre, p1), Equal(prod.Ativo, p2)))), ), Quote((prod, ) => (new ProdutosMercadoLivre()prod.Idprod.DescricaoString.op_Equality(prod.MercadoLivreIdProduto, NULL) ? : prod.MercadoLivreIdProdutoprod.TipoIntegracaoMercadoLivreProdutoEnviadoprod.QuantidadeEstoqueDisponivelprod.PrecoEqual(prod.PossuiKit, False) ? prod.PrecoPromocao : 00prod.PossuiKit.ToList[DSi.Dominio.Entidades.TAB_ProdutoKit](prod.ProdutoKit, )prod.MercadoLivreTipoAnuncio.Descricaoprod.DataUltimaAlteracaoprod.DataUltimaIntegracaoMercadoLivreprod.Ativoprod.IntegraMercadoLivre)), ), )]"
QueryString: ".Count[Admin.CD_MercadoLivre+ProdutosMercadoLivre](.Select[DSi.Dominio.Entidades.TAB_Produto,Admin.CD_MercadoLivre+ProdutosMercadoLivre](.Where[DSi.Dominio.Entidades.TAB_Produto](NHibernate.Linq.NhQueryable`1[DSi.Dominio.Entidades.TAB_Produto], Quote((prod, ) => (AndAlso(Equal(prod.IntegraMercadoLivre, p1), Equal(prod.Ativo, p2)))), ), Quote((prod, ) => (new ProdutosMercadoLivre()prod.Idprod.DescricaoString.op_Equality(prod.MercadoLivreIdProduto, NULL) ? : prod.MercadoLivreIdProdutoprod.TipoIntegracaoMercadoLivreProdutoEnviadoprod.QuantidadeEstoqueDisponivelprod.PrecoEqual(prod.PossuiKit, False) ? prod.PrecoPromocao : 00prod.PossuiKit.ToList[DSi.Dominio.Entidades.TAB_ProdutoKit](prod.ProdutoKit, )prod.MercadoLivreTipoAnuncio.Descricaoprod.DataUltimaAlteracaoprod.DataUltimaIntegracaoMercadoLivreprod.Ativoprod.IntegraMercadoLivre)), ), )"
Source: "NHibernate"
StackTrace: " em NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException()
em NHibernate.Hql.Ast.ANTLR.HqlSqlTranslator.Translate()
em NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary`2 replacements, Boolean shallow, String collectionRole)
em NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
em NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters)
em NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow)
em NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression)
em NHibernate.Linq.DefaultQueryProvider.PrepareQuery(Expression expression, IQuery& query, NhLinqExpression& nhQuery)
em NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression)
em NHibernate.Linq.DefaultQueryProvider.Execute[TResult](Expression expression)"
TargetSite: {Void ThrowQueryException()}
The query is built as follows:
var query = from prod in db.TAB_Produto.Consulta()
where prod.IntegraMercadoLivre == true
&& prod.Ativo == true
select new ProdutosMercadoLivre
{
Id = prod.Id,
Descricao = prod.Descricao,
MercadoLivreID = prod.MercadoLivreIdProduto == null ? string.Empty : prod.MercadoLivreIdProduto,
Atualizando = prod.TipoIntegracaoMercadoLivreProdutoEnviado,
Disponivel = prod.QuantidadeEstoqueDisponivel,
Preco = prod.Preco,
PrecoPromocao = prod.PossuiKit == false ? prod.PrecoPromocao : 0,
PrecoMercadoLivre = 0,
PossuiKit = prod.PossuiKit,
ProdutoKit = prod.ProdutoKit.ToList(),
TipoAnuncio = prod.MercadoLivreTipoAnuncio.Descricao,
DataUltimaAlteracao = prod.DataUltimaAlteracao,
DataUltimaIntegracaoMercadoLivre = prod.DataUltimaIntegracaoMercadoLivre,
Ativo = prod.Ativo,
IntegraMercadoLivre = prod.IntegraMercadoLivre
};
How could I fix this mistake?
The problem was precisely the Tolist() within the select, returned the "pure" object and converted later, with that the problem was solved
– Pilati
Excellent... One thing unrelated to this that I recommend to do is generate the Sqls of your queries, so that from this it is easy to identify common problems of N+1, functions that are not being called from DBMS, etc...
– Raphael Rogenski
Sql was returning the data right, it was only giving this error when generating by Linq, Thanks for the help
– Pilati