Ayende referred me to the user group. Hopefully this is the right
place...
The following code:
session.Linq<Database>().Where(d => d.File.Length > 0).Count()
where Database.File is a byte[] with a length of 1003
throws the following exception:
Could not understand: (ArrayLength([1003]) > 0)
with the following stack trace:
DatabaseRepositoryTester.LinqTest : Failed
System.NotSupportedException: Could not understand: (ArrayLength
([1003]) > 0)
at NHibernate.Linq.Visitors.BinaryCriterionVisitor.GetBinaryCriteria
(ICriteria rootCriteria, ISession session, BinaryExpression expr,
ComparePropToValue comparePropToValue, ComparePropToProp
comparePropToProp, CompareValueToCriteria
compareValueToCriteria, ComparePropToCriteria
comparePropToCriteria) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Bina
ryCriterionVisitor.cs: line 147
at
NHibernate.Linq.Visitors.WhereArgumentsVisitor.VisitBinaryCriterionEx
pression(BinaryExpression expr) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Whe
reArgumentsVisitor.cs: line 258
at NHibernate.Linq.Visitors.WhereArgumentsVisitor.VisitBinary
(BinaryExpression expr) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Whe
reArgumentsVisitor.cs: line 171
at NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Expr
essionVisitor.cs: line 58
at NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit
(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\NHi
bernateExpressionVisitor.cs: line 29
at NHibernate.Linq.Visitors.ExpressionVisitor.VisitLambda
(LambdaExpression lambda) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Expr
essionVisitor.cs: line 315
at NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Expr
essionVisitor.cs: line 72
at NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit
(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\NHi
bernateExpressionVisitor.cs: line 29
at NHibernate.Linq.Visitors.WhereArgumentsVisitor.VisitUnary
(UnaryExpression expr) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Whe
reArgumentsVisitor.cs: line 269
at NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Expr
essionVisitor.cs: line 34
at NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit
(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\NHi
bernateExpressionVisitor.cs: line 29
at NHibernate.Linq.Visitors.WhereArgumentsVisitor.GetCriterion
(ICriteria rootCriteria, ISession session, Expression expression) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Whe
reArgumentsVisitor.cs: line 32
at NHibernate.Linq.Visitors.RootVisitor.HandleWhereCall
(MethodCallExpression call) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Root
Visitor.cs: line 105
at NHibernate.Linq.Visitors.RootVisitor.VisitMethodCall
(MethodCallExpression expr) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Root
Visitor.cs: line 47
at NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Expr
essionVisitor.cs: line 70
at NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit
(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\NHi
bernateExpressionVisitor.cs: line 29
at NHibernate.Linq.Visitors.RootVisitor.VisitMethodCall
(MethodCallExpression expr) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Root
Visitor.cs: line 42
at NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\Expr
essionVisitor.cs: line 70
at NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit
(Expression exp) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\NHi
bernateExpressionVisitor.cs: line 29
at
NHibernate.Linq.Visitors.NHibernateQueryTranslator.TranslateInternal
(Expression expression) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\NHi
bernateQueryTranslator.cs: line 48
at NHibernate.Linq.Visitors.NHibernateQueryTranslator.Translate
(Expression expression, QueryOptions queryOptions) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\Visitors\NHi
bernateQueryTranslator.cs: line 32
at NHibernate.Linq.NHibernateQueryProvider.TranslateExpression
(Expression expression) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\NHibernate
QueryProvider.cs: line 56
at NHibernate.Linq.NHibernateQueryProvider.Execute(Expression
expression) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\NHibernate
QueryProvider.cs: line 63
at
NHibernate.Linq.QueryProvider.System.Linq.IQueryProvider.Execute<T>
(Expression expression) in
d:\OSS\nhcontrib\src\NHibernate.Linq\src\NHibernate.Linq\QueryProvid
er.cs: line 29
at System.Linq.Queryable.Count<TSource>(IQueryable`1 source)
at
Peden.HoursTracker.IntegrationTests.Persistence.DatabaseRepository
Tester.LinqTest() in DatabaseRepositoryTester.cs: line 108
I'm running the 1.1.0.1001 version of NHibernate.Linq.dll.
FWIW, I was able to work around the bug by falling back to the default
Linq provider by injecting a ToArray() call in the sequence (obviously
not my preferred solution).
So, the original repro case looks like this:
session.Linq<Database>().Where(d => d.File.Length > 0)
and the workaround looks like this:
session.Linq<Database>().ToArray().Where(d => d.File.Length >
0)
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.