Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataSet / System / Data / EnumerableRowCollectionExtensions.cs / 1 / 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
- AttachedPropertyMethodSelector.cs
- PropertyChangedEventArgs.cs
- SafeEventLogReadHandle.cs
- RegexStringValidator.cs
- UTF8Encoding.cs
- Point3DCollection.cs
- _NTAuthentication.cs
- CodeMethodInvokeExpression.cs
- SqlUtils.cs
- PkcsUtils.cs
- TimerElapsedEvenArgs.cs
- _SslSessionsCache.cs
- ArrayList.cs
- ColumnHeaderCollectionEditor.cs
- ExpandableObjectConverter.cs
- Int16AnimationBase.cs
- AutomationElementIdentifiers.cs
- AsyncPostBackTrigger.cs
- SpecialNameAttribute.cs
- LocationFactory.cs
- RequestCacheManager.cs
- MimeTypePropertyAttribute.cs
- DefaultBindingPropertyAttribute.cs
- ArrayExtension.cs
- CanExecuteRoutedEventArgs.cs
- Empty.cs
- RequestNavigateEventArgs.cs
- HttpAsyncResult.cs
- UserPreferenceChangedEventArgs.cs
- ObjectSpanRewriter.cs
- RoutedPropertyChangedEventArgs.cs
- CaseInsensitiveOrdinalStringComparer.cs
- TrackBar.cs
- AccessibilityHelperForXpWin2k3.cs
- NegotiationTokenAuthenticator.cs
- InternalBufferOverflowException.cs
- PrinterResolution.cs
- WindowsTokenRoleProvider.cs
- SspiHelper.cs
- IntSecurity.cs
- HttpPostServerProtocol.cs
- FrameworkName.cs
- ListItemConverter.cs
- MeshGeometry3D.cs
- Profiler.cs
- WorkflowOperationBehavior.cs
- PeerContact.cs
- UrlMapping.cs
- SharedPersonalizationStateInfo.cs
- HttpModuleActionCollection.cs
- UIElementHelper.cs
- WhitespaceRule.cs
- TrackingProfileSerializer.cs
- EventLogLink.cs
- SpeakProgressEventArgs.cs
- StoreConnection.cs
- ClientTargetCollection.cs
- PrintPreviewGraphics.cs
- BitmapCodecInfo.cs
- AutomationElement.cs
- FileDialog_Vista_Interop.cs
- XPathNode.cs
- PrtTicket_Public_Simple.cs
- SurrogateEncoder.cs
- __ConsoleStream.cs
- IteratorDescriptor.cs
- TextElementEnumerator.cs
- ParameterCollection.cs
- TypeForwardedToAttribute.cs
- SqlCommandSet.cs
- DataTableTypeConverter.cs
- HotCommands.cs
- SchemaSetCompiler.cs
- Image.cs
- BitmapFrameDecode.cs
- FormsAuthentication.cs
- DataTableMapping.cs
- Point3DCollectionConverter.cs
- ToolStripSettings.cs
- _LocalDataStoreMgr.cs
- XmlNullResolver.cs
- WorkflowTraceTransfer.cs
- ValueSerializerAttribute.cs
- System.Data.OracleClient_BID.cs
- HttpListenerResponse.cs
- PageCatalogPartDesigner.cs
- NullableBoolConverter.cs
- DependencyPropertyValueSerializer.cs
- WpfKnownTypeInvoker.cs
- ServiceModelEnumValidatorAttribute.cs
- Stroke2.cs
- BlockCollection.cs
- CursorInteropHelper.cs
- CombinedGeometry.cs
- AnonymousIdentificationModule.cs
- XamlSerializerUtil.cs
- ToolStripSettings.cs
- DataObjectMethodAttribute.cs
- CryptoProvider.cs
- Operators.cs