public static object CalculateLambdaExpression(ColumnExpression expression, Type dataType, Type[] servicePredefinedTypes, DataRow dataRow, DataRow inputRow) { if (!ExpressionCalculator.IsCacheValid(expression, dataRow, inputRow)) { expression.CachedDelegate = new CachedDelegate { TemplateDataRow = ((dataRow != null) ? dataRow.Table.Clone().NewRow() : null), TemplateInputRow = ((inputRow != null) ? inputRow.Table.Clone().NewRow() : null) }; expression.CachedDelegate.CompiledDelegate = ExpressionCalculator.CompileLambdaExpression(expression, dataType, servicePredefinedTypes, expression.CachedDelegate.TemplateDataRow, expression.CachedDelegate.TemplateInputRow); } if (expression.CachedDelegate.TemplateDataRow != null) { expression.CachedDelegate.TemplateDataRow.ItemArray = dataRow.ItemArray; } if (expression.CachedDelegate.TemplateInputRow != null) { expression.CachedDelegate.TemplateInputRow.ItemArray = inputRow.ItemArray; } return(expression.CachedDelegate.CompiledDelegate.DynamicInvoke(expression.DependentColumns.ToArray())); }
internal static Delegate CompileLambdaExpression(ColumnExpression expression, Type dataType, DataRow dataRow, DataRow inputRow) { return(ExpressionCalculator.CompileLambdaExpression(expression, dataType, null, dataRow, inputRow)); }