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
- ISO2022Encoding.cs
- PathSegmentCollection.cs
- TextContainer.cs
- HtmlHead.cs
- SqlMultiplexer.cs
- XamlSerializer.cs
- XmlSerializationReader.cs
- ThreadStartException.cs
- EventTrigger.cs
- StructuralCache.cs
- ButtonFlatAdapter.cs
- ToolStripGripRenderEventArgs.cs
- IdentityModelDictionary.cs
- SiteMapHierarchicalDataSourceView.cs
- RenderDataDrawingContext.cs
- ConfigurationValues.cs
- DataTable.cs
- UriSectionReader.cs
- Privilege.cs
- InvalidOperationException.cs
- SqlInternalConnection.cs
- LateBoundBitmapDecoder.cs
- ExceptionCollection.cs
- RecipientInfo.cs
- Camera.cs
- QueryCoreOp.cs
- Hyperlink.cs
- IdentitySection.cs
- ObfuscationAttribute.cs
- While.cs
- LambdaSerializationException.cs
- GenericXmlSecurityTokenAuthenticator.cs
- TemplateBindingExpression.cs
- DetailsViewUpdateEventArgs.cs
- JournalEntryListConverter.cs
- HuffModule.cs
- DataGridPagerStyle.cs
- FieldMetadata.cs
- ResourcesChangeInfo.cs
- ModelPropertyImpl.cs
- PropertyPathConverter.cs
- LongCountAggregationOperator.cs
- StreamInfo.cs
- AggregateNode.cs
- ViewUtilities.cs
- RadialGradientBrush.cs
- XpsFilter.cs
- GridViewEditEventArgs.cs
- ExpandCollapsePattern.cs
- SmiEventStream.cs
- HexParser.cs
- ToolStripContentPanel.cs
- Converter.cs
- WebBrowser.cs
- SymmetricCryptoHandle.cs
- SystemColorTracker.cs
- SecurityPermission.cs
- RSAPKCS1SignatureDeformatter.cs
- StateManager.cs
- NonVisualControlAttribute.cs
- EntityDataSourceState.cs
- RangeValidator.cs
- LazyTextWriterCreator.cs
- HttpConfigurationContext.cs
- OledbConnectionStringbuilder.cs
- CodeIndexerExpression.cs
- ProgressBarRenderer.cs
- PropertyRecord.cs
- SchemaTableOptionalColumn.cs
- ExpressionBindingCollection.cs
- RunInstallerAttribute.cs
- GradientBrush.cs
- AppSecurityManager.cs
- DataGridViewHitTestInfo.cs
- LineBreak.cs
- Request.cs
- DelegateBodyWriter.cs
- CodeCompiler.cs
- SynchronizedDisposablePool.cs
- HostProtectionException.cs
- EditorZone.cs
- DictionaryTraceRecord.cs
- ExecutedRoutedEventArgs.cs
- TrackBar.cs
- InputDevice.cs
- Matrix3D.cs
- ScriptComponentDescriptor.cs
- DependencyPropertyAttribute.cs
- CollectionEditor.cs
- PageThemeCodeDomTreeGenerator.cs
- DescriptionAttribute.cs
- EnumConverter.cs
- DataServiceQueryProvider.cs
- ErrorsHelper.cs
- IntSecurity.cs
- CssStyleCollection.cs
- BamlLocalizableResource.cs
- ACL.cs
- XPathBinder.cs
- HtmlMeta.cs