CodeMemberField GetCollectionCache(CollectionBaseInfo coli)
        {
            CodeMemberField field = new CodeMemberField(GetCollectionPropertyType(coli.GetItemClass().Name), "_collectionCache_" + coli.Name);

            field.Attributes     = MemberAttributes.Private;
            field.InitExpression = new CodePrimitiveExpression(null);
            return(field);
        }
        static CodeMemberProperty GetCollectionLinqQuery(CollectionBaseInfo coli, CodeExpression whereExpression)
        {
            string             elementType = coli.GetItemClass().Name;
            CodeMemberProperty prop        = new CodeMemberProperty();

            prop.Name       = coli.Name + "Query";
            prop.Attributes = MemberAttributes.Final | MemberAttributes.Public;
            prop.Type       = new CodeTypeReference(new CodeTypeReference(typeof(System.Linq.IQueryable <>)).BaseType, new CodeTypeReference(elementType));

            prop.GetStatements.Add(
                new CodeMethodReturnStatement(
                    new CodeObjectCreateExpression(
                        new CodeTypeReference(new CodeTypeReference(typeof(Sooda.Linq.SoodaQuerySource <>)).BaseType, new CodeTypeReference(elementType)),
                        new CodeMethodInvokeExpression(This, "GetTransaction"),
                        new CodePropertyReferenceExpression(new CodeTypeReferenceExpression(elementType + "_Factory"), "TheClassInfo"),
                        whereExpression
                        )));

            return(prop);
        }