static void Main(string[] args) { var(p, pc, c, clt, t) = BuildData(); InitData.InitWithData(p, null, pc, c, clt, t); var logger = new FullPathTestBase.TestLogger(); logger.SupressLogMessages.Add(LogMessages.ExecutingQuery); using (var connection = InitData.CreateSqliteConnection()) { connection.Open(); var executor = new TestExecutor(new SqliteExecutor(connection)); Sql.Query .Sqlite <(Person person, IEnumerable <PersonClass> personClass, IEnumerable <Class> cls, IEnumerable <ClassTag> classTags, IEnumerable <Tag> tags)>() .From(x => x.person) .InnerJoinMany(x => x.personClass).On((q, x) => q.person.Id == x.PersonId) .InnerJoinMany(x => x.cls).On((q, x) => q.personClass.One().ClassId == x.Id) .InnerJoinMany(x => x.classTags).On((q, x) => q.cls.One().Id == x.ClassId) .InnerJoinMany(x => x.tags).On((q, x) => q.classTags.One().TagId == x.Id) .Map(x => new { name = x.person.Name, classes = x.cls .Select(cl => new { name = cl.Name, tags = x.tags .Select(z => z.Name) .ToArray() }) .ToArray() }) .ToArray(executor); var results = Sql.Query .Sqlite <(Person person, IEnumerable <PersonClass> personClass, IEnumerable <Class> cls, IEnumerable <ClassTag> classTags, IEnumerable <Tag> tags)>() .From(x => x.person) .InnerJoinMany(x => x.personClass).On((q, x) => q.person.Id == x.PersonId) .InnerJoinMany(x => x.cls).On((q, x) => q.personClass.One().ClassId == x.Id) .InnerJoinMany(x => x.classTags).On((q, x) => q.cls.One().Id == x.ClassId) .InnerJoinMany(x => x.tags).On((q, x) => q.classTags.One().TagId == x.Id) .Map(x => new { x.person }) .ToArray(executor, logger); Console.WriteLine("results count " + results.Count()); logger.PrintAllLogs(); } }