/* 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); }
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; }