Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataSet / System / Data / EnumerableRowCollectionExtensions.cs / 1305376 / EnumerableRowCollectionExtensions.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Globalization; using System.Diagnostics; namespace System.Data { ////// This static class defines the extension methods that add LINQ operator functionality /// within IEnumerableDT and IOrderedEnumerableDT. /// public static class EnumerableRowCollectionExtensions { ////// LINQ's Where operator for generic EnumerableRowCollection. /// public static EnumerableRowCollectionWhere ( this EnumerableRowCollection source, Func predicate) { EnumerableRowCollection edt = new EnumerableRowCollection (source, Enumerable.Where (source, predicate), null); //copy constructor edt.AddPredicate(predicate); return edt; } /// /// LINQ's OrderBy operator for generic EnumerableRowCollection. /// public static OrderedEnumerableRowCollectionOrderBy ( this EnumerableRowCollection source, Func keySelector) { IEnumerable ie = Enumerable.OrderBy (source, keySelector); OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection (source, ie); edt.AddSortExpression(keySelector, false, true); return edt; } /// /// LINQ's OrderBy operator for generic EnumerableRowCollection. /// public static OrderedEnumerableRowCollectionOrderBy ( this EnumerableRowCollection source, Func keySelector, IComparer comparer) { IEnumerable ie = Enumerable.OrderBy (source, keySelector, comparer); OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection (source, ie); edt.AddSortExpression(keySelector, comparer, false, true); return edt; } /// /// LINQ's OrderByDescending operator for generic EnumerableRowCollection. /// public static OrderedEnumerableRowCollectionOrderByDescending ( this EnumerableRowCollection source, Func keySelector) { IEnumerable ie = Enumerable.OrderByDescending (source, keySelector); OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection (source, ie); edt.AddSortExpression(keySelector, true, true); return edt; } /// /// LINQ's OrderByDescending operator for generic EnumerableRowCollection. /// public static OrderedEnumerableRowCollectionOrderByDescending ( this EnumerableRowCollection source, Func keySelector, IComparer comparer) { IEnumerable ie = Enumerable.OrderByDescending (source, keySelector, comparer); OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection (source, ie); edt.AddSortExpression(keySelector, comparer, true, true); return edt; } /// /// LINQ's ThenBy operator for generic EnumerableRowCollection. /// public static OrderedEnumerableRowCollectionThenBy ( this OrderedEnumerableRowCollection source, Func keySelector) { IEnumerable ie = Enumerable.ThenBy ((IOrderedEnumerable )source.EnumerableRows, keySelector); OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection ((EnumerableRowCollection )source, ie); edt.AddSortExpression(keySelector, /*isDesc*/ false, /*isOrderBy*/ false); return edt; } /// /// LINQ's ThenBy operator for generic EnumerableRowCollection. /// public static OrderedEnumerableRowCollectionThenBy ( this OrderedEnumerableRowCollection source, Func keySelector, IComparer comparer) { IEnumerable ie = Enumerable.ThenBy ((IOrderedEnumerable )source.EnumerableRows, keySelector, comparer); OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection ((EnumerableRowCollection )source, ie); edt.AddSortExpression(keySelector, comparer, false, false); return edt; } /// /// LINQ's ThenByDescending operator for generic EnumerableRowCollection. /// public static OrderedEnumerableRowCollectionThenByDescending ( this OrderedEnumerableRowCollection source, Func keySelector) { IEnumerable ie = Enumerable.ThenByDescending ((IOrderedEnumerable )source.EnumerableRows, keySelector); OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection ((EnumerableRowCollection )source, ie); edt.AddSortExpression(keySelector, /*desc*/ true, false); return edt; } /// /// LINQ's ThenByDescending operator for generic EnumerableRowCollection. /// public static OrderedEnumerableRowCollectionThenByDescending ( this OrderedEnumerableRowCollection source, Func keySelector, IComparer comparer) { IEnumerable ie = Enumerable.ThenByDescending ((IOrderedEnumerable )source.EnumerableRows, keySelector, comparer); OrderedEnumerableRowCollection edt = new OrderedEnumerableRowCollection ((EnumerableRowCollection )source, ie); edt.AddSortExpression(keySelector, comparer, true, false); return edt; } /// /// Executes a Select (Projection) on EnumerableDataTable. If the selector returns a different /// type than the type of rows, then AsLinqDataView is disabled, and the returning EnumerableDataTable /// represents an enumerable over the LINQ Query. /// public static EnumerableRowCollectionSelect( this EnumerableRowCollection source, Func selector) { //Anonymous type or some other type //The only thing that matters from this point on is _enumerableRows IEnumerable typedEnumerable = Enumerable.Select(source, selector); // Dont need predicates or sort expression from this point on since we know // AsLinqDataView is disabled. return new EnumerableRowCollection (((object)source) as EnumerableRowCollection, typedEnumerable, ((object)selector) as Func); } ////// Casts an EnumerableDataTable_TSource into EnumerableDataTable_TResult /// public static EnumerableRowCollectionCast (this EnumerableRowCollection source) { // Since Cast does not have the signature Cast_T_R(..) this call is routed // through the non-generic base class EnumerableDataTable if ((null != source) && source.ElementType.Equals(typeof(TResult))) { return (EnumerableRowCollection )(object)source; } else { //Anonymous type or some other type //The only thing that matters from this point on is _enumerableRows IEnumerable typedEnumerable = Enumerable.Cast (source); EnumerableRowCollection newEdt = new EnumerableRowCollection ( typedEnumerable, typeof(TResult).IsAssignableFrom(source.ElementType) && typeof(DataRow).IsAssignableFrom(typeof(TResult)), source.Table); return newEdt; } } } //end class } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CompressStream.cs
- PenLineJoinValidation.cs
- DataGridBoundColumn.cs
- MachineSettingsSection.cs
- Icon.cs
- CompilerParameters.cs
- ComNativeDescriptor.cs
- WebPartDisplayModeCollection.cs
- XmlSchemaSimpleTypeUnion.cs
- MonthCalendar.cs
- WSMessageEncoding.cs
- RectangleConverter.cs
- SessionStateModule.cs
- HttpAsyncResult.cs
- WebExceptionStatus.cs
- milrender.cs
- BaseHashHelper.cs
- DataRowView.cs
- SqlMethodTransformer.cs
- FillRuleValidation.cs
- EncodingDataItem.cs
- _NegotiateClient.cs
- XmlAttribute.cs
- FontConverter.cs
- GZipStream.cs
- TypeTypeConverter.cs
- RuleSetDialog.Designer.cs
- ObjectContext.cs
- PersonalizableTypeEntry.cs
- Axis.cs
- DocumentViewerBaseAutomationPeer.cs
- HyperLink.cs
- HttpCookie.cs
- DispatcherObject.cs
- ListViewInsertEventArgs.cs
- PngBitmapEncoder.cs
- OrderPreservingPipeliningMergeHelper.cs
- WebBrowsableAttribute.cs
- DetailsViewCommandEventArgs.cs
- TextContainerHelper.cs
- InternalEnumValidator.cs
- OperationResponse.cs
- DetailsViewDeletedEventArgs.cs
- ChannelManager.cs
- UriScheme.cs
- PageParser.cs
- OpenTypeLayout.cs
- FieldTemplateUserControl.cs
- PropertyCondition.cs
- PrivilegeNotHeldException.cs
- PlatformCulture.cs
- CodeArrayCreateExpression.cs
- PropertyRef.cs
- VBIdentifierNameEditor.cs
- XmlAtomicValue.cs
- Normalization.cs
- TripleDESCryptoServiceProvider.cs
- FileSecurity.cs
- SQLCharsStorage.cs
- RequestCacheManager.cs
- CommandDevice.cs
- TextSearch.cs
- FileUtil.cs
- WebPartZone.cs
- AutoCompleteStringCollection.cs
- CqlLexer.cs
- ISessionStateStore.cs
- HtmlMeta.cs
- Transform3D.cs
- ToolStripPanelSelectionGlyph.cs
- SynchronizingStream.cs
- SortDescription.cs
- CodeRemoveEventStatement.cs
- StatusBarPanel.cs
- MultiSelectRootGridEntry.cs
- CharKeyFrameCollection.cs
- EnumValAlphaComparer.cs
- DrawingDrawingContext.cs
- InvokeProviderWrapper.cs
- RuntimeVariableList.cs
- ToolboxDataAttribute.cs
- ToolStripItem.cs
- FloatUtil.cs
- PropertyMap.cs
- HandoffBehavior.cs
- ToggleButtonAutomationPeer.cs
- DataPagerCommandEventArgs.cs
- SystemDiagnosticsSection.cs
- XsltLoader.cs
- SrgsToken.cs
- KeyValuePair.cs
- ReadOnlyDataSourceView.cs
- Form.cs
- XmlSecureResolver.cs
- DataRelation.cs
- Keyboard.cs
- AssemblyResourceLoader.cs
- TextModifierScope.cs
- DesignerDataColumn.cs
- RichTextBoxDesigner.cs