Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Cell.cs
- InvokeGenerator.cs
- NeutralResourcesLanguageAttribute.cs
- NativeMethods.cs
- Repeater.cs
- X509ChainPolicy.cs
- ExpressionBuilder.cs
- RegexStringValidatorAttribute.cs
- Sentence.cs
- GeneralTransform3DCollection.cs
- RuleProcessor.cs
- AutomationPropertyInfo.cs
- PathNode.cs
- LocatorBase.cs
- SqlExpressionNullability.cs
- ControlAdapter.cs
- FrameworkElementAutomationPeer.cs
- BitmapSource.cs
- AttributeExtensions.cs
- Canvas.cs
- PhysicalFontFamily.cs
- MailWriter.cs
- GridItemCollection.cs
- _TimerThread.cs
- FlowDocumentFormatter.cs
- DBDataPermissionAttribute.cs
- DataGridPagerStyle.cs
- DeclarationUpdate.cs
- Odbc32.cs
- DataGridColumn.cs
- AppDomainShutdownMonitor.cs
- FacetValues.cs
- BlockUIContainer.cs
- ResourceReader.cs
- FileLogRecordHeader.cs
- Soap.cs
- Win32.cs
- GradientStop.cs
- ViewCellRelation.cs
- Membership.cs
- FilteredReadOnlyMetadataCollection.cs
- ScrollEvent.cs
- XsltArgumentList.cs
- ReadOnlyPermissionSet.cs
- CaseKeyBox.xaml.cs
- precedingsibling.cs
- FontInfo.cs
- UTF32Encoding.cs
- XmlSchemaDocumentation.cs
- Deflater.cs
- ICspAsymmetricAlgorithm.cs
- StreamGeometry.cs
- SqlCacheDependencySection.cs
- EncoderExceptionFallback.cs
- CodePrimitiveExpression.cs
- WebPartDescriptionCollection.cs
- TextEditorSpelling.cs
- LogAppendAsyncResult.cs
- peersecurityelement.cs
- BulletedListEventArgs.cs
- DeviceContexts.cs
- Options.cs
- PnrpPermission.cs
- BindingSource.cs
- GeometryCombineModeValidation.cs
- SafeRegistryHandle.cs
- ConfigurationSectionGroupCollection.cs
- DataGridRelationshipRow.cs
- BaseTemplateBuildProvider.cs
- Semaphore.cs
- SqlCommandSet.cs
- regiisutil.cs
- SmiXetterAccessMap.cs
- RequestContext.cs
- __Filters.cs
- RemoteWebConfigurationHost.cs
- LoaderAllocator.cs
- TableCellAutomationPeer.cs
- PresentationUIStyleResources.cs
- IsolatedStorageException.cs
- XmlArrayItemAttributes.cs
- NavigationExpr.cs
- ToolStripRenderer.cs
- SelectionProcessor.cs
- AddingNewEventArgs.cs
- XmlFormatMapping.cs
- DesignerAutoFormatCollection.cs
- RadioButtonRenderer.cs
- UserInitiatedNavigationPermission.cs
- ProxyHwnd.cs
- JavaScriptObjectDeserializer.cs
- ServiceThrottlingBehavior.cs
- TemplateField.cs
- ConstNode.cs
- WSSecurityPolicy11.cs
- TextEncodedRawTextWriter.cs
- XmlSchemaImporter.cs
- DataGridViewHitTestInfo.cs
- DetailsViewDeletedEventArgs.cs
- ForwardPositionQuery.cs