1 //------------------------------------------------------------------------------
2 // <copyright file="CompensatingCollection.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">[....]</owner>
6 // <owner current="true" primary="false">[....]</owner>
7 //------------------------------------------------------------------------------
9 namespace System.Data.Common.Internal.Materialization
11 using System.Collections.Generic;
13 using System.Linq.Expressions;
16 /// What we return from our materialization of a collection column must be
17 /// exactly the type that the compilers expected when they generated the
18 /// code that asked for it. This class wraps our enumerators and derives
19 /// from all the possible options, covering all the bases.
21 internal class CompensatingCollection<TElement> : IOrderedQueryable<TElement>, IOrderedEnumerable<TElement>
26 /// The thing we're compensating for
28 private readonly IEnumerable<TElement> _source;
31 /// An expression that returns the source as a constant
33 private readonly Expression _expression;
39 public CompensatingCollection(IEnumerable<TElement> source)
41 _source = EntityUtil.CheckArgumentNull(source, "source");
42 _expression = Expression.Constant(source);
47 #region IEnumerable Members
49 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
51 return _source.GetEnumerator();
56 #region IEnumerable<TElement> Members
58 IEnumerator<TElement> IEnumerable<TElement>.GetEnumerator()
60 return _source.GetEnumerator();
65 #region IOrderedEnumerable<TElement> Members
67 IOrderedEnumerable<TElement> IOrderedEnumerable<TElement>.CreateOrderedEnumerable<K>(Func<TElement, K> keySelector, IComparer<K> comparer, bool descending)
69 throw EntityUtil.NotSupported(System.Data.Entity.Strings.ELinq_CreateOrderedEnumerableNotSupported);
74 #region IQueryable Members
76 Type IQueryable.ElementType
78 get { return typeof(TElement); }
81 Expression IQueryable.Expression
83 get { return _expression; }
86 IQueryProvider IQueryable.Provider
90 throw EntityUtil.NotSupported(System.Data.Entity.Strings.ELinq_UnsupportedQueryableMethod);
96 #region IQueryable<TElement> Members