Beispiel #1
0
        /*
        public void TestFilter()
        {
            IDictionary<string, string> query = new Dictionary<string, string>();
            //query.Add("$query", "row.Id > 0 && row.Id < 3");
            query.Add("$filter", "Id gt 1");
            ITypeResolver _resolver = new AssemblyTypeResolver();
            var type = typeof(Manusia);//_resolver.Resolve("Manusia");
            var param = query.ToNameValueCollection();
            //var database = GetDatabase();
            //var collection = database.GetCollection(ResolveModelType(table), table);
            //var result = collection.FindAllAs(type);
            Manusia a = new Manusia();
            var result = a.PabrikManusia;
            var data = Filter(result, type, param);

        }

        public void TestLinqQuery()
        {

            var db = new Manusia();

            var host = new ScriptingHost(db) { };
            InitializeHost(host);
            host.AddReference(typeof(Manusia).Assembly);
            host.ImportNamespace(typeof(Manusia).Namespace);

            string query =
                "from Manusia t in PabrikManusia where t.Id == 1 select t";

            object data = host.Execute(query);

        }*/

        protected void InitializeHost(ScriptingHost host)
        {
            //ITypeResolver resolver = GetResolver();
            Assembly[] rs = null;//resolver.GetReferences();
            string[] ns = null;//resolver.GetNamespaces();

            if (rs != null)
                foreach (Assembly r in rs)
                    host.AddReference(r);

            if (ns != null)
                foreach (string n in ns)
                    host.ImportNamespace(n);
        }
Beispiel #2
0
        public object Filter(IEnumerable collection, Type type, NameValueCollection param)
        {
            object data = null;

            if (param["$filter"] != null)
            {
                var casted = Cast(collection, type);
                data = Filter(casted, type, param);
            }
            else
            {
                string finalQuery = "";
                if (param["$query"] != null)
                {
                    finalQuery = string.Format("{0} " + param["$query"] + "{1}",
                                               "(from " + type.Name + " row in Rows where ",
                                               " select row)");
                }
                else
                {
                    finalQuery = "(from " + type.Name + " row in Rows select row)";
                }

                if (param["$skip"] != null)
                {
                    int skip;
                    int.TryParse(param["$skip"], out skip);
                    finalQuery += ".Skip(" + skip + ")";
                }
                if (param["$take"] != null)
                {
                    int take;
                    int.TryParse(param["$take"], out take);
                    finalQuery += ".Take(" + take + ")";
                }

                var host = new ScriptingHost() { Rows = collection };
                InitializeHost(host);
                if(type.Assembly!=null)
                    host.AddReference(type.Assembly);
                if(!string.IsNullOrEmpty(type.Namespace))
                    host.ImportNamespace(type.Namespace);
                data = host.Execute(finalQuery);
            }
            return data;
        }