コード例 #1
0
        private static FieldsBuilder ParseProjection(string projection)
        {
            var fields = new FieldsBuilder();

            if (String.IsNullOrEmpty(projection))
            {
                return(fields);
            }

            var projectionDocument = BsonSerializer.Deserialize <BsonDocument>(projection);

            foreach (var element in projectionDocument)
            {
                var value = element.Value;

                if (value.IsBoolean && value.AsBoolean || value.IsInt32 && value.AsInt32 != 0)
                {
                    fields.Include(element.Name);
                }
                else if (value.IsBoolean && !value.AsBoolean || value.IsInt32 && value.AsInt32 == 0)
                {
                    fields.Exclude(element.Name);
                }
                else
                {
                    throw Errors.InvalidProjectionFormat();
                }
            }

            return(fields);
        }
コード例 #2
0
ファイル: MongoExpress.cs プロジェクト: redwolf0817/EFFC3.0
        protected override FrameDLRObject ParseExpress(FrameDLRObject obj)
        {
            var            rtn            = FrameDLRObject.CreateInstance();
            var            query          = new QueryDocument(true);
            var            update         = new UpdateDocument(true);
            FrameDLRObject insert         = FrameDLRObject.CreateInstance(FrameDLRFlags.SensitiveCase);
            var            fields         = new FieldsBuilder();
            var            collectionname = "";

            foreach (var k in obj.Keys)
            {
                if (k.StartsWith("$"))
                {
                    if (k.ToLower() == "$where")
                    {
                        WhereExpress((FrameDLRObject)obj.GetValue(k), query, fields);
                    }
                    else if (k.ToLower() == "$table")
                    {
                        if (obj.GetValue(k) is string)
                        {
                            collectionname = ComFunc.nvl(obj.GetValue(k));
                        }
                    }
                }
                else
                {
                    var v = obj.GetValue(k);
                    if (this.CurrentAct == ActType.Query)
                    {
                        if (v is bool)
                        {
                            var bisinclude = (bool)v;
                            if (bisinclude)
                            {
                                fields.Include(k);
                            }
                            else
                            {
                                fields.Exclude(k);
                            }
                        }
                    }
                    else if (this.CurrentAct == ActType.Insert)
                    {
                        insert.SetValue(k, v);
                    }
                    else
                    {
                        if (!(v is FrameDLRObject))
                        {
                            update.Add(k, BsonValue.Create(v));
                        }
                    }
                }
            }
            rtn.query  = query;
            rtn.update = update;
            rtn.insert = insert;
            rtn.fields = fields;
            rtn.table  = collectionname;
            return(rtn);
        }