public void ExpressionSameString(string sameString) { Expression <Func <ParentOne, string, bool> > exp = (p, str) => p.SameSame == sameString; var parentParam = Expression.Parameter(typeof(ParentOne), "p"); var stringParm = Expression.Parameter(typeof(string), "str"); var parentSame = Expression.Property(parentParam, "SameSame"); var body = Expression.Equal(parentSame, stringParm); var completeExpression = Expression.Lambda <Func <ParentOne, string, bool> >(body, new[] { parentParam, stringParm }); var compiledExpression = completeExpression.Compile(); var p = new ParentOne { Year = 99, SameSame = "Dicky" }; Console.WriteLine(compiledExpression(p, sameString)); }
public static void Do() { GrandParent rpt = new GrandParent { Name = "report1", Description = "This is simply a report" }; ParentOne stcln1 = new ParentOne { Columns = "asdf", Alias = "just a column" }; ParentOne stcln2 = new ParentOne { Columns = "asdf", Alias = "just a column" }; rpt.ParentList = new List <ParentOne>(); rpt.AddSelectedColumns(stcln1); rpt.AddSelectedColumns(stcln2); ChildOne c1 = new ChildOne(); c1.Name = "Ram"; stcln1.AddSelectedColumns(c1); Helper.Create(rpt); Helper.Select(); //f.Create<Report>(rpt); ///Delete many elements in one-to-may relationship //var obj1 = f.GetSelectedColumnsById(1); //Collection<SelectedColumn> selectedcolumns = new Collection<SelectedColumn>(); //foreach(object[] item in obj1) //{ // selectedcolumns.Add(new SelectedColumn {ParentId=(int) item[0],Columns = (string) item[1], Alias = (string) item[2], SortType = (string) item[3], SortOrder = (string) item[4], GrandParentId = (int) item[5] }); //} //f.Delete<SelectedColumn>(selectedcolumns); }
public void CombineExpression(int year, string sameString) { Expression <Func <ParentOne, string, int, bool> > exp = (p, str, i) => p.SameSame == str && p.Year < i; // Parameters = var parentParam = Expression.Parameter(typeof(ParentOne), "p"); var strParam = Expression.Parameter(typeof(string), "str"); var intParam = Expression.Parameter(typeof(int), "yr"); // parernt members/Properties/Fields required. var sameSame = Expression.Property(parentParam, typeof(ParentOne).GetProperty("SameSame")); // On the Parent.SameSame, call ToString() no paramters neeeded var lowerSame = Expression.Call(sameSame, "ToLower", null); var yearP = Expression.Property(parentParam, "Year"); var left = Expression.Equal(lowerSame, strParam); var right = Expression.LessThanOrEqual(yearP, intParam); // The body of the Func var finalBody = Expression.And(left, right); // the form of the Expression, With a func var complete = Expression.Lambda <Func <ParentOne, string, int, bool> >(finalBody, new[] { parentParam, strParam, intParam }); var lv = Expression.Lambda <Func <ParentOne, string, int, bool> >( Expression.And( Expression.Equal(Expression.Call(Expression.Property(parentParam, "SameSame"), "ToLower", null), strParam), Expression.LessThanOrEqual(Expression.Property(parentParam, "Year"), yearP) ), new[] { parentParam, strParam, Expression.Parameter(typeof(int), "Yr") }); Console.WriteLine(lv); //Console.WriteLine(complete); var aveit = lv.Compile(); var p = new ParentOne { Year = 1000, SameSame = "Jelly" }; Console.WriteLine(aveit(p, sameString, year)); }
public void ExpressionYear(int year) { Expression <Func <ParentOne, int, bool> > d = (p, i) => p.Year >= i; var parent = Expression.Parameter(typeof(ParentOne), "p"); var yearVal = Expression.Parameter(typeof(int), "yr"); var parentYear = Expression.Property(parent, "Year"); //var yearConstant = Expression.Constant(100, typeof(int)); BinaryExpression body = Expression.GreaterThanOrEqual(parentYear, yearVal); var completeExpression = Expression.Lambda(body, new[] { yearVal, parent }); var x = completeExpression.Compile(); var p = new ParentOne { Year = 99 }; Console.WriteLine(x.DynamicInvoke(year, p)); Console.WriteLine(completeExpression); Console.WriteLine(completeExpression.Body); Console.WriteLine(completeExpression.Parameters[0]); }
public virtual void AddSelectedColumns(ParentOne parent) { parent.GrandParent = this; ParentList.Add(parent); }