Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Extensions / UI / WebControls / Expressions / SearchExpression.cs / 1305376 / SearchExpression.cs
#if ORYX_VNEXT namespace Microsoft.Web.Data.UI.WebControls.Expressions { #else namespace System.Web.UI.WebControls.Expressions { #endif using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Web.Resources; using System.Web.UI; using System.Web.UI.WebControls; public class SearchExpression : ParameterDataSourceExpression { public string DataFields { get { return (string)ViewState["DataFields"] ?? String.Empty; } set { ViewState["DataFields"] = value; } } public SearchType SearchType { get { object o = ViewState["SearchType"]; return o != null ? (SearchType)o : SearchType.StartsWith; } set { ViewState["SearchType"] = value; } } public StringComparison ComparisonType { get { object o = ViewState["ComparisonType"]; return o != null ? (StringComparison)o : StringComparison.OrdinalIgnoreCase; } set { ViewState["ComparisonType"] = value; } } public override IQueryable GetQueryable(IQueryable source) { if (source == null) { return null; } if ((DataFields == null) || String.IsNullOrEmpty(DataFields.Trim())) { throw new InvalidOperationException(AtlasWeb.Expressions_DataFieldRequired); } IDictionaryvalues = GetValues(); if (values.Count == 0) { throw new InvalidOperationException(AtlasWeb.SearchExpression_ParameterRequired); } string query = Convert.ToString(values.First().Value, CultureInfo.CurrentCulture); if (String.IsNullOrEmpty(query)) { return null; } string[] properties = DataFields.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); // Use the or expression to or the fields together List searchExpressions = new List (); ParameterExpression parameterExpression = Expression.Parameter(source.ElementType, String.Empty); foreach (string p in properties) { Expression property = ExpressionHelper.CreatePropertyExpression(parameterExpression, p.Trim()); searchExpressions.Add(CreateCallExpression(property, query)); } return ExpressionHelper.Where(source, Expression.Lambda(ExpressionHelper.Or(searchExpressions), parameterExpression)); } private Expression CreateCallExpression(Expression property, string query) { // LINQ to SQL does not support the overloads StartsWith(string, StringComparer) or EndsWith(string, StringComparer) // and Contains has not overload that takes a StringComparer if (SearchType == SearchType.Contains || (ViewState["ComparisonType"] == null)) { return Expression.Call(property, SearchType.ToString(), Type.EmptyTypes, Expression.Constant(query, property.Type)); } return Expression.Call(property, SearchType.ToString(), Type.EmptyTypes, Expression.Constant(query, property.Type), Expression.Constant(ComparisonType)); } } } // 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; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Web.Resources; using System.Web.UI; using System.Web.UI.WebControls; public class SearchExpression : ParameterDataSourceExpression { public string DataFields { get { return (string)ViewState["DataFields"] ?? String.Empty; } set { ViewState["DataFields"] = value; } } public SearchType SearchType { get { object o = ViewState["SearchType"]; return o != null ? (SearchType)o : SearchType.StartsWith; } set { ViewState["SearchType"] = value; } } public StringComparison ComparisonType { get { object o = ViewState["ComparisonType"]; return o != null ? (StringComparison)o : StringComparison.OrdinalIgnoreCase; } set { ViewState["ComparisonType"] = value; } } public override IQueryable GetQueryable(IQueryable source) { if (source == null) { return null; } if ((DataFields == null) || String.IsNullOrEmpty(DataFields.Trim())) { throw new InvalidOperationException(AtlasWeb.Expressions_DataFieldRequired); } IDictionary values = GetValues(); if (values.Count == 0) { throw new InvalidOperationException(AtlasWeb.SearchExpression_ParameterRequired); } string query = Convert.ToString(values.First().Value, CultureInfo.CurrentCulture); if (String.IsNullOrEmpty(query)) { return null; } string[] properties = DataFields.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); // Use the or expression to or the fields together List searchExpressions = new List (); ParameterExpression parameterExpression = Expression.Parameter(source.ElementType, String.Empty); foreach (string p in properties) { Expression property = ExpressionHelper.CreatePropertyExpression(parameterExpression, p.Trim()); searchExpressions.Add(CreateCallExpression(property, query)); } return ExpressionHelper.Where(source, Expression.Lambda(ExpressionHelper.Or(searchExpressions), parameterExpression)); } private Expression CreateCallExpression(Expression property, string query) { // LINQ to SQL does not support the overloads StartsWith(string, StringComparer) or EndsWith(string, StringComparer) // and Contains has not overload that takes a StringComparer if (SearchType == SearchType.Contains || (ViewState["ComparisonType"] == null)) { return Expression.Call(property, SearchType.ToString(), Type.EmptyTypes, Expression.Constant(query, property.Type)); } return Expression.Call(property, SearchType.ToString(), Type.EmptyTypes, Expression.Constant(query, property.Type), Expression.Constant(ComparisonType)); } } } // 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
- IdentityVerifier.cs
- DelegateArgumentValue.cs
- BrowserCapabilitiesCodeGenerator.cs
- ObjectDataSourceChooseMethodsPanel.cs
- GradientSpreadMethodValidation.cs
- MethodToken.cs
- WsdlEndpointConversionContext.cs
- PrintDialog.cs
- ClientSponsor.cs
- ContextStaticAttribute.cs
- SoapAttributeAttribute.cs
- SHA512.cs
- StateManager.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- HttpContextServiceHost.cs
- RadioButtonBaseAdapter.cs
- SourceFilter.cs
- TableColumnCollection.cs
- OleDbWrapper.cs
- ConnectionProviderAttribute.cs
- XhtmlBasicFormAdapter.cs
- TCPListener.cs
- XmlWrappingReader.cs
- SID.cs
- SemanticTag.cs
- GroupBox.cs
- ListViewInsertedEventArgs.cs
- XmlSchemaAttributeGroupRef.cs
- ProtocolsConfigurationEntry.cs
- DocumentPaginator.cs
- ExpandoObject.cs
- Container.cs
- IconBitmapDecoder.cs
- ModulesEntry.cs
- InitializingNewItemEventArgs.cs
- WinInet.cs
- WebBrowserNavigatingEventHandler.cs
- NamedObject.cs
- ListSortDescriptionCollection.cs
- ControlParameter.cs
- CalendarDayButton.cs
- ManifestBasedResourceGroveler.cs
- PropertyCondition.cs
- _HeaderInfoTable.cs
- RoutedEventHandlerInfo.cs
- SolidBrush.cs
- Transform3DCollection.cs
- SystemUdpStatistics.cs
- XPathArrayIterator.cs
- PointAnimationUsingPath.cs
- WebHttpElement.cs
- ObsoleteAttribute.cs
- MenuItemBindingCollection.cs
- Matrix.cs
- Asn1IntegerConverter.cs
- ToolstripProfessionalRenderer.cs
- WebBrowserContainer.cs
- ParameterElement.cs
- EditorZoneBase.cs
- FixedElement.cs
- PassportPrincipal.cs
- DataExpression.cs
- Command.cs
- TextTreeUndoUnit.cs
- ToolStripPanelRenderEventArgs.cs
- ExpressionEditor.cs
- Documentation.cs
- DispatcherExceptionEventArgs.cs
- AuthorizationRule.cs
- XmlTextWriter.cs
- DataBoundControlAdapter.cs
- SqlWriter.cs
- ColumnClickEvent.cs
- RegistryPermission.cs
- ProgressBarRenderer.cs
- ActivitiesCollection.cs
- PositiveTimeSpanValidator.cs
- ControlSerializer.cs
- LessThan.cs
- Buffer.cs
- PermissionRequestEvidence.cs
- RegistrySecurity.cs
- ManagedCodeMarkers.cs
- XmlSchemaChoice.cs
- FullTextLine.cs
- CatalogZone.cs
- MultiSelectRootGridEntry.cs
- NewExpression.cs
- ProtocolsConfiguration.cs
- ForeignConstraint.cs
- DateTimeHelper.cs
- ArraySortHelper.cs
- XPathPatternBuilder.cs
- DurableRuntimeValidator.cs
- InstanceKeyNotReadyException.cs
- ForwardPositionQuery.cs
- DataGridViewDesigner.cs
- LineSegment.cs
- ToolStripComboBox.cs
- FileVersion.cs