Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Extensions / UI / WebControls / Expressions / ExpressionHelper.cs / 1305376 / ExpressionHelper.cs
#if ORYX_VNEXT namespace Microsoft.Web.Data.UI.WebControls.Expressions { #else namespace System.Web.UI.WebControls.Expressions { #endif using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; internal static class ExpressionHelper { public static Expression GetValue(Expression exp) { Type realType = GetUnderlyingType(exp.Type); if (realType == exp.Type) { return exp; } return Expression.Convert(exp, realType); } public static Type GetUnderlyingType(Type type) { // Get the type from Nullable types if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { return type.GetGenericArguments()[0]; } return type; } public static object BuildObjectValue(object value, Type type) { #if ORYX_VNEXT return Microsoft.Web.Data.UI.WebControls.DataSourceHelper.BuildObjectValue(value, type, String.Empty); #else return System.Web.UI.WebControls.DataSourceHelper.BuildObjectValue(value, type, String.Empty); #endif } public static Expression CreatePropertyExpression(Expression parameterExpression, string propertyName) { if (parameterExpression == null) { return null; } if (String.IsNullOrEmpty(propertyName)) { return null; } Expression propExpression = null; string[] props = propertyName.Split('.'); foreach (var p in props) { if (propExpression == null) { propExpression = Expression.PropertyOrField(parameterExpression, p); } else { propExpression = Expression.PropertyOrField(propExpression, p); } } return propExpression; } public static IQueryable Where(this IQueryable source, LambdaExpression lambda) { return Call(source, "Where", lambda, source.ElementType); } public static IQueryable Call(this IQueryable source, string queryMethod, Type[] genericArgs, params Expression[] arguments) { if (source == null) { throw new ArgumentNullException("source"); } return source.Provider.CreateQuery( Expression.Call( typeof(Queryable), queryMethod, genericArgs, arguments)); } public static IQueryable Call(this IQueryable source, string queryableMethod, LambdaExpression lambda, params Type[] genericArgs) { if (source == null) { throw new ArgumentNullException("source"); } return source.Provider.CreateQuery( Expression.Call( typeof(Queryable), queryableMethod, genericArgs, source.Expression, Expression.Quote(lambda))); } public static Expression Or(IEnumerableexpressions) { Expression orExpression = null; foreach (Expression e in expressions) { if (e == null) { continue; } if (orExpression == null) { orExpression = e; } else { orExpression = Expression.OrElse(orExpression, e); } } return orExpression; } public static Expression And(IEnumerable expressions) { Expression andExpression = null; foreach (Expression e in expressions) { if (e == null) { continue; } if (andExpression == null) { andExpression = e; } else { andExpression = Expression.AndAlso(andExpression, e); } } return andExpression; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. #if ORYX_VNEXT namespace Microsoft.Web.Data.UI.WebControls.Expressions { #else namespace System.Web.UI.WebControls.Expressions { #endif using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; internal static class ExpressionHelper { public static Expression GetValue(Expression exp) { Type realType = GetUnderlyingType(exp.Type); if (realType == exp.Type) { return exp; } return Expression.Convert(exp, realType); } public static Type GetUnderlyingType(Type type) { // Get the type from Nullable types if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { return type.GetGenericArguments()[0]; } return type; } public static object BuildObjectValue(object value, Type type) { #if ORYX_VNEXT return Microsoft.Web.Data.UI.WebControls.DataSourceHelper.BuildObjectValue(value, type, String.Empty); #else return System.Web.UI.WebControls.DataSourceHelper.BuildObjectValue(value, type, String.Empty); #endif } public static Expression CreatePropertyExpression(Expression parameterExpression, string propertyName) { if (parameterExpression == null) { return null; } if (String.IsNullOrEmpty(propertyName)) { return null; } Expression propExpression = null; string[] props = propertyName.Split('.'); foreach (var p in props) { if (propExpression == null) { propExpression = Expression.PropertyOrField(parameterExpression, p); } else { propExpression = Expression.PropertyOrField(propExpression, p); } } return propExpression; } public static IQueryable Where(this IQueryable source, LambdaExpression lambda) { return Call(source, "Where", lambda, source.ElementType); } public static IQueryable Call(this IQueryable source, string queryMethod, Type[] genericArgs, params Expression[] arguments) { if (source == null) { throw new ArgumentNullException("source"); } return source.Provider.CreateQuery( Expression.Call( typeof(Queryable), queryMethod, genericArgs, arguments)); } public static IQueryable Call(this IQueryable source, string queryableMethod, LambdaExpression lambda, params Type[] genericArgs) { if (source == null) { throw new ArgumentNullException("source"); } return source.Provider.CreateQuery( Expression.Call( typeof(Queryable), queryableMethod, genericArgs, source.Expression, Expression.Quote(lambda))); } public static Expression Or(IEnumerable expressions) { Expression orExpression = null; foreach (Expression e in expressions) { if (e == null) { continue; } if (orExpression == null) { orExpression = e; } else { orExpression = Expression.OrElse(orExpression, e); } } return orExpression; } public static Expression And(IEnumerable expressions) { Expression andExpression = null; foreach (Expression e in expressions) { if (e == null) { continue; } if (andExpression == null) { andExpression = e; } else { andExpression = Expression.AndAlso(andExpression, e); } } return andExpression; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataViewManagerListItemTypeDescriptor.cs
- DoubleAnimation.cs
- ThicknessAnimation.cs
- Random.cs
- OleDbMetaDataFactory.cs
- PlainXmlDeserializer.cs
- LinqTreeNodeEvaluator.cs
- ListControlActionList.cs
- ReliableMessagingVersionConverter.cs
- DesignTimeTemplateParser.cs
- TimeoutHelper.cs
- OdbcConnectionStringbuilder.cs
- MarkupProperty.cs
- BinaryVersion.cs
- TemplateManager.cs
- ProgressChangedEventArgs.cs
- RegularExpressionValidator.cs
- FixedNode.cs
- TransformGroup.cs
- EmptyCollection.cs
- DbMetaDataCollectionNames.cs
- CodeAttributeDeclaration.cs
- ToolStripInSituService.cs
- DataGridDesigner.cs
- ASCIIEncoding.cs
- AsyncOperation.cs
- EndpointAddressElementBase.cs
- MenuItemCollectionEditor.cs
- TogglePatternIdentifiers.cs
- BaseCAMarshaler.cs
- Win32Exception.cs
- DivideByZeroException.cs
- DiscoveryDocumentLinksPattern.cs
- FilterQuery.cs
- XmlKeywords.cs
- DataStorage.cs
- WindowsRichEdit.cs
- LinqDataSourceDeleteEventArgs.cs
- GetWorkflowTree.cs
- RefExpr.cs
- StartFileNameEditor.cs
- TextRangeAdaptor.cs
- AutomationFocusChangedEventArgs.cs
- ListBoxItem.cs
- TreeIterator.cs
- SqlFileStream.cs
- XmlSchemaComplexContentExtension.cs
- PathData.cs
- WmlLabelAdapter.cs
- TreeBuilder.cs
- KerberosSecurityTokenAuthenticator.cs
- PreviewKeyDownEventArgs.cs
- LabelLiteral.cs
- AliasGenerator.cs
- EventData.cs
- ExceptionUtil.cs
- handlecollector.cs
- AlternateViewCollection.cs
- ChannelBinding.cs
- objectquery_tresulttype.cs
- DataControlButton.cs
- MenuItem.cs
- Bits.cs
- SystemIPv4InterfaceProperties.cs
- Transform3D.cs
- PropertyEmitterBase.cs
- ContainerVisual.cs
- HandlerBase.cs
- _FtpControlStream.cs
- EventArgs.cs
- UIntPtr.cs
- MtomMessageEncoder.cs
- TypeGeneratedEventArgs.cs
- CngProperty.cs
- PersonalizableAttribute.cs
- BaseCollection.cs
- ListControl.cs
- CodeAccessSecurityEngine.cs
- CustomWebEventKey.cs
- XmlDocument.cs
- WebServiceMethodData.cs
- TheQuery.cs
- BamlRecordWriter.cs
- DataAccessException.cs
- FillRuleValidation.cs
- PlaceHolder.cs
- Operand.cs
- RequestSecurityTokenResponse.cs
- ClientWindowsAuthenticationMembershipProvider.cs
- TreeNodeCollection.cs
- DataSysAttribute.cs
- DataGridViewDataConnection.cs
- ActivityStateRecord.cs
- CodeExpressionStatement.cs
- RootDesignerSerializerAttribute.cs
- DateTimeFormat.cs
- RegisteredExpandoAttribute.cs
- DbConnectionPoolOptions.cs
- TraceShell.cs
- XmlLoader.cs