Code:
/ 4.0 / 4.0 / 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 EnumerableRowCollection Where(
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 OrderedEnumerableRowCollection OrderBy(
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 OrderedEnumerableRowCollection OrderBy(
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 OrderedEnumerableRowCollection OrderByDescending(
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 OrderedEnumerableRowCollection OrderByDescending(
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 OrderedEnumerableRowCollection ThenBy(
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 OrderedEnumerableRowCollection ThenBy(
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 OrderedEnumerableRowCollection ThenByDescending(
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 OrderedEnumerableRowCollection ThenByDescending(
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 EnumerableRowCollection Select(
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 EnumerableRowCollection Cast(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.
//------------------------------------------------------------------------------
//
// 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 EnumerableRowCollection Where(
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 OrderedEnumerableRowCollection OrderBy(
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 OrderedEnumerableRowCollection OrderBy(
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 OrderedEnumerableRowCollection OrderByDescending(
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 OrderedEnumerableRowCollection OrderByDescending(
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 OrderedEnumerableRowCollection ThenBy(
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 OrderedEnumerableRowCollection ThenBy(
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 OrderedEnumerableRowCollection ThenByDescending(
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 OrderedEnumerableRowCollection ThenByDescending(
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 EnumerableRowCollection Select(
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 EnumerableRowCollection Cast(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
- InputManager.cs
- CreateParams.cs
- _ScatterGatherBuffers.cs
- ListViewSortEventArgs.cs
- MonitoringDescriptionAttribute.cs
- SystemParameters.cs
- TextTreeTextElementNode.cs
- UrlPath.cs
- TextServicesManager.cs
- MarkerProperties.cs
- SourceCollection.cs
- XmlSchemaGroupRef.cs
- WhiteSpaceTrimStringConverter.cs
- RefreshPropertiesAttribute.cs
- _BufferOffsetSize.cs
- SqlErrorCollection.cs
- FloaterBaseParagraph.cs
- SessionState.cs
- SqlError.cs
- SQLResource.cs
- RangeBaseAutomationPeer.cs
- TypeLibConverter.cs
- TriggerCollection.cs
- NativeMethods.cs
- RefreshEventArgs.cs
- PresentationAppDomainManager.cs
- xmlformatgeneratorstatics.cs
- SearchForVirtualItemEventArgs.cs
- DocumentPageViewAutomationPeer.cs
- AdornerDecorator.cs
- ValueTypeFixupInfo.cs
- ViewLoader.cs
- DependencyPropertyAttribute.cs
- SafeFileMappingHandle.cs
- CompareInfo.cs
- ManifestSignatureInformation.cs
- NameValuePermission.cs
- DeleteWorkflowOwnerCommand.cs
- ProcessModelInfo.cs
- newitemfactory.cs
- ScrollBar.cs
- FormViewDeletedEventArgs.cs
- PointHitTestResult.cs
- MessageSecurityVersionConverter.cs
- SimpleBitVector32.cs
- SystemWebCachingSectionGroup.cs
- DetailsViewInsertEventArgs.cs
- VerificationAttribute.cs
- TempFiles.cs
- ColorContextHelper.cs
- WebPartTracker.cs
- JsonReaderDelegator.cs
- RangeValueProviderWrapper.cs
- future.cs
- MessagePropertyVariants.cs
- PathSegmentCollection.cs
- XPathEmptyIterator.cs
- BamlLocalizationDictionary.cs
- Win32.cs
- BackgroundWorker.cs
- HttpApplication.cs
- ImageInfo.cs
- IntSumAggregationOperator.cs
- XmlCompatibilityReader.cs
- JsonQNameDataContract.cs
- AmbiguousMatchException.cs
- ThreadAttributes.cs
- EventManager.cs
- OracleColumn.cs
- SqlFacetAttribute.cs
- Material.cs
- MonthChangedEventArgs.cs
- DesignerEventService.cs
- TextElementEditingBehaviorAttribute.cs
- CustomWebEventKey.cs
- TraceContextRecord.cs
- PermissionRequestEvidence.cs
- RealizationDrawingContextWalker.cs
- AspNetRouteServiceHttpHandler.cs
- DataGridViewAccessibleObject.cs
- uribuilder.cs
- DbProviderFactories.cs
- Error.cs
- TickBar.cs
- ITextView.cs
- DispatcherExceptionFilterEventArgs.cs
- IsolatedStorageFilePermission.cs
- LoadMessageLogger.cs
- SymLanguageVendor.cs
- ResolveNameEventArgs.cs
- Exceptions.cs
- TextDecorationCollection.cs
- SmiContext.cs
- ArrayTypeMismatchException.cs
- ConfigurationSection.cs
- CodeTypeDeclarationCollection.cs
- List.cs
- HandleCollector.cs
- _ScatterGatherBuffers.cs
- AuthorizationPolicyTypeElementCollection.cs