Update Reference Sources to .NET Framework 4.6.1
[mono.git] / mcs / class / referencesource / System.Data.Entity / System / Data / Common / Internal / Materialization / CompensatingCollection.cs
1 //------------------------------------------------------------------------------
2 // <copyright file="CompensatingCollection.cs" company="Microsoft">
3 //     Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">[....]</owner>
6 // <owner current="true" primary="false">[....]</owner>
7 //------------------------------------------------------------------------------
8
9 namespace System.Data.Common.Internal.Materialization
10 {
11     using System.Collections.Generic;
12     using System.Linq;
13     using System.Linq.Expressions;
14
15     /// <summary>
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.
20     /// </summary>
21     internal class CompensatingCollection<TElement> : IOrderedQueryable<TElement>, IOrderedEnumerable<TElement>
22     {
23         #region private state
24
25         /// <summary>
26         /// The thing we're compensating for
27         /// </summary>
28         private readonly IEnumerable<TElement> _source;
29
30         /// <summary>
31         /// An expression that returns the source as a constant
32         /// </summary>
33         private readonly Expression _expression;
34
35         #endregion
36
37         #region constructors
38
39         public CompensatingCollection(IEnumerable<TElement> source)
40         {
41             _source = EntityUtil.CheckArgumentNull(source, "source");
42             _expression = Expression.Constant(source);
43         }
44
45         #endregion
46
47         #region IEnumerable Members
48
49         System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
50         {
51             return _source.GetEnumerator();
52         }
53
54         #endregion
55
56         #region IEnumerable<TElement> Members
57
58         IEnumerator<TElement> IEnumerable<TElement>.GetEnumerator()
59         {
60             return _source.GetEnumerator();
61         }
62
63         #endregion
64
65         #region IOrderedEnumerable<TElement> Members
66
67         IOrderedEnumerable<TElement> IOrderedEnumerable<TElement>.CreateOrderedEnumerable<K>(Func<TElement, K> keySelector, IComparer<K> comparer, bool descending)
68         {
69             throw EntityUtil.NotSupported(System.Data.Entity.Strings.ELinq_CreateOrderedEnumerableNotSupported);
70         }
71
72         #endregion
73
74         #region IQueryable Members
75
76         Type IQueryable.ElementType
77         {
78             get { return typeof(TElement); }
79         }
80
81         Expression IQueryable.Expression
82         {
83             get { return _expression; }
84         }
85
86         IQueryProvider IQueryable.Provider
87         {
88             get
89             {
90                 throw EntityUtil.NotSupported(System.Data.Entity.Strings.ELinq_UnsupportedQueryableMethod);
91             }
92         }
93
94         #endregion
95
96         #region IQueryable<TElement> Members
97         #endregion
98     }
99 }