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
- MediaContextNotificationWindow.cs
- __Error.cs
- AutomationIdentifierGuids.cs
- ApplicationGesture.cs
- RectangleGeometry.cs
- XsdDateTime.cs
- DiscreteKeyFrames.cs
- InkCanvasInnerCanvas.cs
- MethodAccessException.cs
- ViewValidator.cs
- DirectoryRedirect.cs
- Stacktrace.cs
- StructuredTypeEmitter.cs
- MethodRental.cs
- SessionStateUtil.cs
- X509CertificateClaimSet.cs
- ProxyAssemblyNotLoadedException.cs
- HttpCapabilitiesEvaluator.cs
- GuidelineSet.cs
- SpecularMaterial.cs
- PropertyItemInternal.cs
- TemplateModeChangedEventArgs.cs
- EventWaitHandleSecurity.cs
- PropVariant.cs
- InternalResources.cs
- RowVisual.cs
- ScrollItemProviderWrapper.cs
- NamespaceList.cs
- MenuItemBindingCollection.cs
- XmlSchemaImport.cs
- TextureBrush.cs
- WindowsPen.cs
- NGCSerializationManagerAsync.cs
- Vector.cs
- Metafile.cs
- ActivationArguments.cs
- ActivityCodeGenerator.cs
- UnauthorizedWebPart.cs
- SoapCodeExporter.cs
- XamlReaderHelper.cs
- StdValidatorsAndConverters.cs
- TypeConverter.cs
- XmlUnspecifiedAttribute.cs
- CalendarDayButton.cs
- PointLight.cs
- PageSettings.cs
- WindowsPen.cs
- CommandManager.cs
- AssociationSet.cs
- X509Chain.cs
- Guid.cs
- RectangleGeometry.cs
- LinkTarget.cs
- ScopelessEnumAttribute.cs
- PassportIdentity.cs
- RegistryPermission.cs
- ActivityExecutionWorkItem.cs
- TypeLoader.cs
- OleDbConnection.cs
- ProcessHostMapPath.cs
- SingleStorage.cs
- CompositeScriptReferenceEventArgs.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- TextSelectionHighlightLayer.cs
- WindowsStatic.cs
- PropertyInfoSet.cs
- UiaCoreProviderApi.cs
- StorageComplexTypeMapping.cs
- ValueTypeFixupInfo.cs
- ImageIndexConverter.cs
- TimeSpanValidator.cs
- ItemChangedEventArgs.cs
- GroupLabel.cs
- OptimisticConcurrencyException.cs
- SoapSchemaExporter.cs
- Literal.cs
- XmlValidatingReaderImpl.cs
- Drawing.cs
- TableRow.cs
- ToolStripDesignerUtils.cs
- ExpressionParser.cs
- Viewport3DAutomationPeer.cs
- EdmTypeAttribute.cs
- ObjectPropertyMapping.cs
- TextTreeUndoUnit.cs
- smtpconnection.cs
- DictionaryTraceRecord.cs
- NonBatchDirectoryCompiler.cs
- SiteMapDataSourceDesigner.cs
- UserNameSecurityToken.cs
- IssuanceTokenProviderBase.cs
- MessageProtectionOrder.cs
- AttributeData.cs
- KnownTypeAttribute.cs
- ToggleButton.cs
- SqlDesignerDataSourceView.cs
- PageCodeDomTreeGenerator.cs
- RulePatternOps.cs
- XmlNodeChangedEventArgs.cs
- ClientConfigurationSystem.cs