Entities:
[Serializable]
[HierarchyRoot]
public class TestMain : Entity
{
public TestMain( Session session ) : base( session ) { }
[Field, Key]
public int Id { get; private set; }
[Field]
public int Val { get; set; }
[Field]
public EntitySet<testsuba> TestSubAs { get; private set; }
[Field]
public EntitySet<testsubb> TestSubBs { get; private set; }
}
[Serializable]
[HierarchyRoot]
public class TestSubA : Entity
{
public TestSubA( Session session ) : base( session ) { }
[Field, Key]
public int Id { get; private set; }
[Field]
public int Val { get; set; }
}
[Serializable]
[HierarchyRoot]
public class TestSubB : Entity
{
public TestSubB( Session session ) : base( session ) { }
[Field, Key]
public int Id { get; private set; }
[Field]
public int Val { get; set; }
}
Code:
Session.Query.All<testmain>().Where( m => m.TestSubAs.Any( a => a.Val == 1 ) && m.TestSubBs.Any( b => b.Val == 2 ) ).ToList();
Exception:
Xtensive.Orm.SyntaxErrorException was unhandled
Message=SQL error occured.
SQL error details 'Type: SyntaxError;'
Query 'SELECT [a].[Id], [a].[TypeId], [a].[Val] FROM (SELECT [b].[Id], [b].[TypeId], [b].[Val], (SELECT CAST((CASE WHEN EXISTS (SELECT * FROM [TestMain-TestSubAs-TestSubA] [c] INNER JOIN [TestSubA] [d] ON ([c].[TestSubA] = [d].[Id]) WHERE (([c].[TestMain] = [b].[Id]) AND ([d].[Val] = 1))) THEN 1 ELSE 0 END) AS bit)) AS [c01umn] FROM (SELECT [e].[Id], 191 AS [TypeId], [e].[Val] FROM [TestMain] [e]) [b]) [a] WHERE (([a].[c01umn] <> 0) AND EXISTS (SELECT * FROM [TestMain-TestSubBs-TestSubB] [f] INNER JOIN [TestSubB] [g] ON ([f].[TestSubB] = [g].[Id]) WHERE (([f].[TestMain] = [a].[Id]) AND ([g].[Val] = 2))));'
Original message 'There was an error parsing the query. [ Token line number = 1,Token line offset = 91,Token in error = SELECT ]'
Source=Xtensive.Orm
StackTrace:
at Xtensive.Orm.Providers.Sql.StorageDriver.ExecuteCommand[TResult](Session session, DbCommand command, Func2 action)
at Xtensive.Orm.Providers.Sql.StorageDriver.ExecuteReader(Session session, DbCommand command)
at Xtensive.Orm.Providers.Sql.Command.ExecuteReader()
at Xtensive.Orm.Providers.Sql.SimpleCommandProcessor.ExecuteTasksWithReader(QueryRequest lastRequest)
at Xtensive.Orm.Providers.Sql.SessionHandler.<Xtensive.Orm.Providers.Sql.IQueryExecutor.ExecuteTupleReader>d__0.MoveNext()
at Xtensive.Orm.Providers.Sql.SqlProvider.<OnEnumerate>d__9.MoveNext()
at Xtensive.Orm.Rse.Providers.ExecutableProvider.<GetEnumerator>d__0.MoveNext()
at Xtensive.Core.EnumerableExtensions.<Batch>d__20
1.MoveNext()
at Xtensive.Core.EnumerableExtensions.<applybeforeandafter>d281.MoveNext()
at Xtensive.Orm.Rse.RecordSet.<GetBatchedEnumerator>d__c.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext()
at Xtensive.Core.EnumerableExtensions.<batch>d201.MoveNext()
at Xtensive.Core.EnumerableExtensions.<ApplyBeforeAndAfter>d__28
1.MoveNext()
at System.Linq.Enumerable.<selectmanyiterator>d142.MoveNext()
at System.Collections.Generic.List
1..ctor(IEnumerable1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source)
InnerException: System.Data.SqlServerCe.SqlCeException
Message=There was an error parsing the query. [ Token line number = 1,Token line offset = 91,Token in error = SELECT ]
Source=SQL Server Compact ADO.NET Data Provider
HResult=-2147217900
NativeError=25501
StackTrace:
at System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()
at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at Xtensive.Orm.Providers.Sql.StorageDriver.<executereader>b4(DbCommand c)
at Xtensive.Orm.Providers.Sql.StorageDriver.ExecuteCommandTResult
asked
Jul 21 '12 at 04:44
TeaMan
140●14●14●18
Hello TeaMan,
Thanks for the model and the query. It will help us to reproduce the issue. I'll notify you of any news.