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
- AdornerLayer.cs
- BuildResultCache.cs
- CodeTypeReferenceCollection.cs
- PhysicalAddress.cs
- DataMemberListEditor.cs
- AnnotationAdorner.cs
- ExternalException.cs
- RightsManagementPermission.cs
- ReadOnlyMetadataCollection.cs
- DetailsViewInsertedEventArgs.cs
- SqlDataSource.cs
- Nodes.cs
- COM2ColorConverter.cs
- WebRequestModuleElement.cs
- SymbolPair.cs
- Figure.cs
- DesignerOptionService.cs
- Label.cs
- FormsAuthenticationEventArgs.cs
- ModelItemKeyValuePair.cs
- TimerElapsedEvenArgs.cs
- ECDsa.cs
- PageBuildProvider.cs
- ExpressionDumper.cs
- SplitterCancelEvent.cs
- OdbcFactory.cs
- DoubleAverageAggregationOperator.cs
- ExtentKey.cs
- WebPartUtil.cs
- MessageQueueConverter.cs
- HttpResponse.cs
- ReferencedAssembly.cs
- BitmapDownload.cs
- TabItemWrapperAutomationPeer.cs
- DBSqlParserColumnCollection.cs
- IdleTimeoutMonitor.cs
- Sql8ExpressionRewriter.cs
- StrongNameMembershipCondition.cs
- ServiceNameElement.cs
- ResumeStoryboard.cs
- UserUseLicenseDictionaryLoader.cs
- BuildTopDownAttribute.cs
- ConfigurationStrings.cs
- OptimizedTemplateContent.cs
- DelegateSerializationHolder.cs
- KoreanLunisolarCalendar.cs
- StaticSiteMapProvider.cs
- JournalEntry.cs
- MarkerProperties.cs
- PropertyConverter.cs
- SmtpMail.cs
- EditingCommands.cs
- ProfileSettings.cs
- GenerateHelper.cs
- CatalogPartCollection.cs
- TriggerAction.cs
- EventDescriptorCollection.cs
- WebSysDisplayNameAttribute.cs
- NavigatorOutput.cs
- BindingElement.cs
- XmlAtomErrorReader.cs
- ProtocolImporter.cs
- Application.cs
- XmlSchemaImporter.cs
- ExceptionTranslationTable.cs
- OleDbConnectionFactory.cs
- DataGridDetailsPresenter.cs
- GradientStop.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- RectangleGeometry.cs
- BamlStream.cs
- WindowsTitleBar.cs
- EmptyControlCollection.cs
- ProvidePropertyAttribute.cs
- ViewSimplifier.cs
- EntityConnectionStringBuilder.cs
- LicenseManager.cs
- ScopelessEnumAttribute.cs
- XmlSchemaChoice.cs
- ClaimSet.cs
- UnauthorizedAccessException.cs
- ResolveNameEventArgs.cs
- BitmapPalette.cs
- LineServices.cs
- SmtpSection.cs
- BaseCollection.cs
- HwndSourceKeyboardInputSite.cs
- ProvidePropertyAttribute.cs
- XmlWellformedWriter.cs
- DropShadowEffect.cs
- TextDocumentView.cs
- MemberAccessException.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- SmiContext.cs
- ObjectNotFoundException.cs
- ApplicationManager.cs
- DataReceivedEventArgs.cs
- WindowsClientCredential.cs
- ScrollBar.cs
- SafeFreeMibTable.cs