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
- GridView.cs
- Translator.cs
- PageThemeParser.cs
- CopyEncoder.cs
- GridViewColumnCollection.cs
- Token.cs
- AnnotationHelper.cs
- OdbcConnectionPoolProviderInfo.cs
- BaseDataListPage.cs
- CodeSnippetTypeMember.cs
- DoubleCollectionConverter.cs
- StorageRoot.cs
- XmlDataSource.cs
- VisualStateManager.cs
- InternalBufferOverflowException.cs
- ContextProperty.cs
- StrokeNodeOperations.cs
- TextReturnReader.cs
- HttpProfileBase.cs
- AnnotationResource.cs
- HostedHttpRequestAsyncResult.cs
- EntitySqlQueryCacheEntry.cs
- BrowserTree.cs
- BufferedGraphicsManager.cs
- ProjectionPruner.cs
- SamlDoNotCacheCondition.cs
- ColumnResult.cs
- XamlWriter.cs
- XmlUTF8TextReader.cs
- WebPartTransformerCollection.cs
- AssemblyCache.cs
- SQLByteStorage.cs
- XmlSchemaSimpleTypeList.cs
- DecoderExceptionFallback.cs
- WebPartsPersonalization.cs
- ExceptionValidationRule.cs
- HatchBrush.cs
- OciEnlistContext.cs
- BamlRecords.cs
- AddInPipelineAttributes.cs
- Rotation3DAnimation.cs
- AppSettingsExpressionBuilder.cs
- DataFieldEditor.cs
- Conditional.cs
- SqlServices.cs
- DataServiceKeyAttribute.cs
- DefaultTraceListener.cs
- ZipIOLocalFileHeader.cs
- FontFamily.cs
- BezierSegment.cs
- ImageAttributes.cs
- CrossSiteScriptingValidation.cs
- RadioButtonRenderer.cs
- TreeViewCancelEvent.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- Interlocked.cs
- DataObjectEventArgs.cs
- AngleUtil.cs
- IdnMapping.cs
- ProcessHostFactoryHelper.cs
- SafePointer.cs
- SpotLight.cs
- AuthenticationConfig.cs
- UIntPtr.cs
- SystemBrushes.cs
- ScrollableControl.cs
- ImageList.cs
- ToolStripContainer.cs
- PrimaryKeyTypeConverter.cs
- Cursors.cs
- ParallelTimeline.cs
- DynamicPropertyHolder.cs
- HttpProfileGroupBase.cs
- WrapPanel.cs
- WrapPanel.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- GroupBox.cs
- Timer.cs
- documentsequencetextpointer.cs
- GridViewRowPresenter.cs
- GridViewRowEventArgs.cs
- DataListItemCollection.cs
- ToolBar.cs
- BindMarkupExtensionSerializer.cs
- ListViewDeleteEventArgs.cs
- DelimitedListTraceListener.cs
- SchemaCollectionCompiler.cs
- TextBoxRenderer.cs
- BlurBitmapEffect.cs
- DocumentReference.cs
- ReliableMessagingVersionConverter.cs
- TableLayout.cs
- GlyphCache.cs
- DirectoryGroupQuery.cs
- SignatureResourceHelper.cs
- XhtmlConformanceSection.cs
- RelationshipEndCollection.cs
- WebPartConnectionsDisconnectVerb.cs
- CounterCreationDataConverter.cs
- ServiceEndpoint.cs