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(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.
#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
- Control.cs
- Int32Animation.cs
- ThreadInterruptedException.cs
- TraceListener.cs
- SafeCryptoHandles.cs
- TextServicesManager.cs
- BufferAllocator.cs
- InstalledFontCollection.cs
- TextTreeUndoUnit.cs
- CryptoProvider.cs
- Margins.cs
- Set.cs
- MenuItemCollectionEditorDialog.cs
- TypeKeyValue.cs
- BaseDataBoundControl.cs
- COM2PropertyPageUITypeConverter.cs
- DesignerTransaction.cs
- PartialCachingControl.cs
- unsafenativemethodstextservices.cs
- EventBuilder.cs
- Int16AnimationUsingKeyFrames.cs
- DataSourceView.cs
- FormViewInsertEventArgs.cs
- XmlIgnoreAttribute.cs
- _Rfc2616CacheValidators.cs
- TabItemWrapperAutomationPeer.cs
- MetadataItem.cs
- BindableAttribute.cs
- Geometry.cs
- ViewGenerator.cs
- PenLineCapValidation.cs
- TypedAsyncResult.cs
- WindowsTab.cs
- BitHelper.cs
- BoolExpressionVisitors.cs
- DataGridItemAutomationPeer.cs
- TrustLevelCollection.cs
- SmtpTransport.cs
- MarkupCompilePass1.cs
- EventData.cs
- CompiledQueryCacheEntry.cs
- DataView.cs
- XmlHierarchicalDataSourceView.cs
- UpdateTracker.cs
- ElementMarkupObject.cs
- SerializerWriterEventHandlers.cs
- FileIOPermission.cs
- FrameworkElementFactoryMarkupObject.cs
- PlatformCulture.cs
- EventHandlerList.cs
- DictionarySectionHandler.cs
- MetaTable.cs
- XPathDocumentIterator.cs
- Rect.cs
- CompositeDispatchFormatter.cs
- ObjectDataSourceEventArgs.cs
- PngBitmapEncoder.cs
- FilePrompt.cs
- BamlResourceSerializer.cs
- UnaryExpressionHelper.cs
- GridViewDeleteEventArgs.cs
- TreeNodeCollection.cs
- DelimitedListTraceListener.cs
- HeaderedContentControl.cs
- QueryNode.cs
- ProfileWorkflowElement.cs
- DbProviderConfigurationHandler.cs
- VectorAnimationBase.cs
- HMACSHA512.cs
- HttpCachePolicy.cs
- _ListenerResponseStream.cs
- IdentitySection.cs
- TextFormatterHost.cs
- SmiMetaDataProperty.cs
- XmlNavigatorStack.cs
- ThreadStateException.cs
- CommonRemoteMemoryBlock.cs
- ListViewItem.cs
- MenuEventArgs.cs
- PolicyChain.cs
- SystemUnicastIPAddressInformation.cs
- XmlProcessingInstruction.cs
- TypeDelegator.cs
- PrintDialogException.cs
- PointUtil.cs
- RenderContext.cs
- SqlTrackingWorkflowInstance.cs
- InstanceStoreQueryResult.cs
- CodeLinePragma.cs
- TypeDescriptionProviderAttribute.cs
- ExportOptions.cs
- CodeDomConfigurationHandler.cs
- BasicBrowserDialog.designer.cs
- OLEDB_Util.cs
- AuthenticationException.cs
- FontDifferentiator.cs
- CodeTypeDelegate.cs
- MissingMemberException.cs
- HashSetEqualityComparer.cs
- MemberAssignmentAnalysis.cs