示例#1
0
文件: Program.cs 项目: ShaneGH/SqlDsl
        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();
            }
        }