annotate Source/Mapping/MappingSchema.cs @ 8:a34cfdde80d6

removed strong signing added FrameworkPathOverride for linux builds
author cin
date Wed, 29 Nov 2017 12:43:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using System.Data.SqlTypes;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using System.Diagnostics;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using System.IO;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using System.Diagnostics.CodeAnalysis;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using System.Threading;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 using System.Xml;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 using System.Xml.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 using BLToolkit.Common;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 using BLToolkit.Properties;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 using BLToolkit.Reflection.Extension;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 using BLToolkit.Reflection.MetadataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 #region ReSharper disable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 // ReSharper disable SuggestUseVarKeywordEvident
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 // ReSharper disable UseObjectOrCollectionInitializer
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 // ReSharper disable SuggestUseVarKeywordEverywhere
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 // ReSharper disable RedundantTypeArgumentsOfMethod
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 using KeyValue = System.Collections.Generic.KeyValuePair<System.Type,System.Type>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 using Convert = BLToolkit.Common.Convert;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 namespace BLToolkit.Mapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 public class MappingSchema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 #region Constructors
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 public MappingSchema()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 InitNullValues();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 #region ObjectMapper Support
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 private readonly Dictionary<Type,ObjectMapper> _mappers = new Dictionary<Type,ObjectMapper>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 private readonly Dictionary<Type,ObjectMapper> _pendingMappers = new Dictionary<Type,ObjectMapper>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 public ObjectMapper GetObjectMapper(Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 ObjectMapper om;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 lock (_mappers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 if (_mappers.TryGetValue(type, out om))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 return om;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 // This object mapper is initializing right now.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 // Note that only one thread can access to _pendingMappers each time.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 if (_pendingMappers.TryGetValue(type, out om))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 return om;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 om = CreateObjectMapper(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 if (om == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 throw new MappingException(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 string.Format("Cannot create object mapper for the '{0}' type.", type.FullName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 _pendingMappers.Add(type, om);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 om.Init(this, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 _pendingMappers.Remove(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 // Officially publish this ready to use object mapper.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 SetObjectMapperInternal(type, om);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 return om;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 private void SetObjectMapperInternal(Type type, ObjectMapper om)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 _mappers.Add(type, om);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 if (type.IsAbstract)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 var actualType = TypeAccessor.GetAccessor(type).Type;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 if (!_mappers.ContainsKey(actualType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 _mappers.Add(actualType, om);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 public void SetObjectMapper(Type type, ObjectMapper om)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 if (type == null) throw new ArgumentNullException("type");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 lock (_mappers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 SetObjectMapperInternal(type, om);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 protected virtual ObjectMapper CreateObjectMapper(Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 Attribute attr = TypeHelper.GetFirstAttribute(type, typeof(ObjectMapperAttribute));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 return attr == null? CreateObjectMapperInstance(type): ((ObjectMapperAttribute)attr).ObjectMapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 protected virtual ObjectMapper CreateObjectMapperInstance(Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 return new ObjectMapper();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 #region MetadataProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 private MetadataProviderBase _metadataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 public MetadataProviderBase MetadataProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 [DebuggerStepThrough]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 get { return _metadataProvider ?? (_metadataProvider = CreateMetadataProvider()); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 set { _metadataProvider = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 protected virtual MetadataProviderBase CreateMetadataProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 return MetadataProviderBase.CreateProvider();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 #region Public Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 public virtual ExtensionList Extensions { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 #region Convert
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 public virtual void InitNullValues()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 DefaultSByteNullValue = (SByte) GetNullValue(typeof(SByte));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 DefaultInt16NullValue = (Int16) GetNullValue(typeof(Int16));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 DefaultInt32NullValue = (Int32) GetNullValue(typeof(Int32));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 DefaultInt64NullValue = (Int64) GetNullValue(typeof(Int64));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 DefaultByteNullValue = (Byte) GetNullValue(typeof(Byte));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 DefaultUInt16NullValue = (UInt16) GetNullValue(typeof(UInt16));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 DefaultUInt32NullValue = (UInt32) GetNullValue(typeof(UInt32));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 DefaultUInt64NullValue = (UInt64) GetNullValue(typeof(UInt64));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 DefaultCharNullValue = (Char) GetNullValue(typeof(Char));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 DefaultSingleNullValue = (Single) GetNullValue(typeof(Single));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 DefaultDoubleNullValue = (Double) GetNullValue(typeof(Double));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 DefaultBooleanNullValue = (Boolean) GetNullValue(typeof(Boolean));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 DefaultStringNullValue = (String) GetNullValue(typeof(String));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 DefaultDateTimeNullValue = (DateTime) GetNullValue(typeof(DateTime));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 DefaultDateTimeOffsetNullValue = (DateTimeOffset)GetNullValue(typeof(DateTimeOffset));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 DefaultLinqBinaryNullValue = (Binary) GetNullValue(typeof(Binary));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 DefaultDecimalNullValue = (Decimal) GetNullValue(typeof(Decimal));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 DefaultGuidNullValue = (Guid) GetNullValue(typeof(Guid));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 DefaultStreamNullValue = (Stream) GetNullValue(typeof(Stream));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 DefaultXmlReaderNullValue = (XmlReader) GetNullValue(typeof(XmlReader));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 DefaultXmlDocumentNullValue = (XmlDocument) GetNullValue(typeof(XmlDocument));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 DefaultXElementNullValue = (XElement) GetNullValue(typeof(XElement));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 #region Primitive Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 public sbyte DefaultSByteNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 public virtual SByte ConvertToSByte(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 value is SByte ? (SByte)value :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 value is Byte ? (SByte)(Byte)value :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 value == null ? DefaultSByteNullValue :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 Convert.ToSByte(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 public short DefaultInt16NullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 public virtual Int16 ConvertToInt16(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 value is Int16? (Int16)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 value == null || value is DBNull? DefaultInt16NullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 Convert.ToInt16(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 public int DefaultInt32NullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 public virtual Int32 ConvertToInt32(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 value is Int32? (Int32)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 value == null || value is DBNull? DefaultInt32NullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 Convert.ToInt32(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 public long DefaultInt64NullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 public virtual Int64 ConvertToInt64(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 value is Int64? (Int64)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 value == null || value is DBNull? DefaultInt64NullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 Convert.ToInt64(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 public byte DefaultByteNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 public virtual Byte ConvertToByte(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 value is Byte? (Byte)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 value == null || value is DBNull? DefaultByteNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 Convert.ToByte(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 public ushort DefaultUInt16NullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 public virtual UInt16 ConvertToUInt16(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 value is UInt16? (UInt16)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 value is Int16? (UInt16)(Int16)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 value == null || value is DBNull? DefaultUInt16NullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 Convert.ToUInt16(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 public uint DefaultUInt32NullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 public virtual UInt32 ConvertToUInt32(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 value is UInt32? (UInt32)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 value is Int32? (UInt32)(Int32)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 value == null || value is DBNull? DefaultUInt32NullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 Convert.ToUInt32(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 public ulong DefaultUInt64NullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 public virtual UInt64 ConvertToUInt64(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 value is UInt64? (UInt64)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 value is Int64? (UInt64)(Int64)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 value == null || value is DBNull? DefaultUInt64NullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 Convert.ToUInt64(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 public char DefaultCharNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 public virtual Char ConvertToChar(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 value is Char? (Char)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 value == null || value is DBNull? DefaultCharNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 Convert.ToChar(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 public float DefaultSingleNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 public virtual Single ConvertToSingle(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 value is Single? (Single)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 value == null || value is DBNull? DefaultSingleNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 Convert.ToSingle(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 public double DefaultDoubleNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 public virtual Double ConvertToDouble(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 value is Double? (Double)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 value == null || value is DBNull? DefaultDoubleNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 Convert.ToDouble(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 public bool DefaultBooleanNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 public virtual Boolean ConvertToBoolean(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 value is Boolean? (Boolean)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 value == null || value is DBNull? DefaultBooleanNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 Convert.ToBoolean(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 #region Simple Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 public string DefaultStringNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 public virtual String ConvertToString(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 value is String? (String)value :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 value == null || value is DBNull? DefaultStringNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 Convert.ToString(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 public DateTime DefaultDateTimeNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 public virtual DateTime ConvertToDateTime(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 value is DateTime? (DateTime)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 value == null || value is DBNull? DefaultDateTimeNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 Convert.ToDateTime(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 public virtual TimeSpan ConvertToTimeSpan(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 return ConvertToDateTime(value).TimeOfDay;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 public DateTimeOffset DefaultDateTimeOffsetNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 public virtual DateTimeOffset ConvertToDateTimeOffset(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 value is DateTimeOffset? (DateTimeOffset)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 value == null || value is DBNull? DefaultDateTimeOffsetNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 Convert.ToDateTimeOffset(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 public Binary DefaultLinqBinaryNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 public virtual Binary ConvertToLinqBinary(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 value is Binary ? (Binary)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 value is byte[] ? new Binary((byte[])value) :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 value == null || value is DBNull? DefaultLinqBinaryNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 Convert.ToLinqBinary(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 public decimal DefaultDecimalNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 public virtual Decimal ConvertToDecimal(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 value is Decimal? (Decimal)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 value == null || value is DBNull? DefaultDecimalNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 Convert.ToDecimal(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 public Guid DefaultGuidNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 public virtual Guid ConvertToGuid(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 value is Guid? (Guid)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 value == null || value is DBNull? DefaultGuidNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 Convert.ToGuid(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 public Stream DefaultStreamNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 public virtual Stream ConvertToStream(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 value is Stream? (Stream)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 value == null || value is DBNull? DefaultStreamNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 Convert.ToStream(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 public XmlReader DefaultXmlReaderNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 public virtual XmlReader ConvertToXmlReader(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 value is XmlReader? (XmlReader)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 value == null || value is DBNull? DefaultXmlReaderNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 Convert.ToXmlReader(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 public XmlDocument DefaultXmlDocumentNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 public virtual XmlDocument ConvertToXmlDocument(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 value is XmlDocument? (XmlDocument)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 value == null || value is DBNull? DefaultXmlDocumentNullValue:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 Convert.ToXmlDocument(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 public XElement DefaultXElementNullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 public virtual XElement ConvertToXElement(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 value is XElement ? (XElement)value :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 value == null || value is DBNull ? DefaultXElementNullValue :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 XElement.Parse(value.ToString());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 public virtual byte[] ConvertToByteArray(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 value is byte[]? (byte[])value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 Convert.ToByteArray(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 public virtual char[] ConvertToCharArray(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 value is char[]? (char[])value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 Convert.ToCharArray(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 #region Nullable Types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 public virtual SByte? ConvertToNullableSByte(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 value is SByte? (SByte?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 value is Byte? (SByte?)(Byte)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 Convert.ToNullableSByte(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459 public virtual Int16? ConvertToNullableInt16(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 value is Int16? (Int16?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 Convert.ToNullableInt16(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 public virtual Int32? ConvertToNullableInt32(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 value is Int32? (Int32?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 Convert.ToNullableInt32(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 public virtual Int64? ConvertToNullableInt64(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 value is Int64? (Int64?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 Convert.ToNullableInt64(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483 public virtual Byte? ConvertToNullableByte(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486 value is Byte? (Byte?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 Convert.ToNullableByte(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 public virtual UInt16? ConvertToNullableUInt16(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 value is UInt16? (UInt16?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 value is Int16? (UInt16?)(Int16)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 Convert.ToNullableUInt16(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 public virtual UInt32? ConvertToNullableUInt32(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 value is UInt32? (UInt32?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 value is Int32? (UInt32?)(Int32)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 Convert.ToNullableUInt32(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 public virtual UInt64? ConvertToNullableUInt64(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 value is UInt64? (UInt64?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 value is Int64? (UInt64?)(Int64)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 Convert.ToNullableUInt64(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 public virtual Char? ConvertToNullableChar(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 value is Char? (Char?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526 Convert.ToNullableChar(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 public virtual Double? ConvertToNullableDouble(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 value is Double? (Double?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 Convert.ToNullableDouble(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 public virtual Single? ConvertToNullableSingle(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 value is Single? (Single?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 Convert.ToNullableSingle(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 public virtual Boolean? ConvertToNullableBoolean(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548 value is Boolean? (Boolean?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550 Convert.ToNullableBoolean(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 public virtual DateTime? ConvertToNullableDateTime(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556 value is DateTime? (DateTime?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558 Convert.ToNullableDateTime(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561 public virtual TimeSpan? ConvertToNullableTimeSpan(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563 DateTime? dt = ConvertToNullableDateTime(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564 return dt == null? null : (TimeSpan?)dt.Value.TimeOfDay;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567 public virtual DateTimeOffset? ConvertToNullableDateTimeOffset(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 value is DateTimeOffset? (DateTimeOffset?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572 Convert.ToNullableDateTimeOffset(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
574
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
575 public virtual Decimal? ConvertToNullableDecimal(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
576 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
577 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
578 value is Decimal? (Decimal?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
579 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
580 Convert.ToNullableDecimal(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
581 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
582
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
583 public virtual Guid? ConvertToNullableGuid(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
584 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
585 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
586 value is Guid? (Guid?)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
587 value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
588 Convert.ToNullableGuid(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
589 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
590
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
591 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
592
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
593 #region SqlTypes
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
594
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
595 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
596
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
597 public virtual SqlByte ConvertToSqlByte(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
598 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
599 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
600 value == null || value is DBNull? SqlByte.Null :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
601 value is SqlByte? (SqlByte)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
602 Convert.ToSqlByte(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
603 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
604
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
605 public virtual SqlInt16 ConvertToSqlInt16(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
606 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
607 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
608 value == null || value is DBNull? SqlInt16.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
609 value is SqlInt16? (SqlInt16)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
610 Convert.ToSqlInt16(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
611 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
612
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
613 public virtual SqlInt32 ConvertToSqlInt32(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
614 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
615 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
616 value == null || value is DBNull? SqlInt32.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
617 value is SqlInt32? (SqlInt32)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
618 Convert.ToSqlInt32(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
619 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
620
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
621 public virtual SqlInt64 ConvertToSqlInt64(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
622 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
623 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
624 value == null || value is DBNull? SqlInt64.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
625 value is SqlInt64? (SqlInt64)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
626 Convert.ToSqlInt64(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
627 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
628
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
629 public virtual SqlSingle ConvertToSqlSingle(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
630 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
631 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
632 value == null || value is DBNull? SqlSingle.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
633 value is SqlSingle? (SqlSingle)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
634 Convert.ToSqlSingle(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
635 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
636
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
637 public virtual SqlBoolean ConvertToSqlBoolean(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
638 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
639 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
640 value == null || value is DBNull? SqlBoolean.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
641 value is SqlBoolean? (SqlBoolean)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
642 Convert.ToSqlBoolean(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
643 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
644
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
645 public virtual SqlDouble ConvertToSqlDouble(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
646 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
647 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
648 value == null || value is DBNull? SqlDouble.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
649 value is SqlDouble? (SqlDouble)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
650 Convert.ToSqlDouble(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
651 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
652
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
653 public virtual SqlDateTime ConvertToSqlDateTime(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
654 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
655 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
656 value == null || value is DBNull? SqlDateTime.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
657 value is SqlDateTime? (SqlDateTime)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
658 Convert.ToSqlDateTime(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
659 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
660
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
661 public virtual SqlDecimal ConvertToSqlDecimal(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
662 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
663 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
664 value == null || value is DBNull? SqlDecimal.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
665 value is SqlDecimal? (SqlDecimal)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
666 value is SqlMoney? ((SqlMoney)value).ToSqlDecimal():
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
667 Convert.ToSqlDecimal(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
668 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
669
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
670 public virtual SqlMoney ConvertToSqlMoney(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
671 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
672 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
673 value == null || value is DBNull? SqlMoney.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
674 value is SqlMoney? (SqlMoney)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
675 value is SqlDecimal? ((SqlDecimal)value).ToSqlMoney():
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
676 Convert.ToSqlMoney(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
677 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
678
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
679 public virtual SqlString ConvertToSqlString(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
680 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
681 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
682 value == null || value is DBNull? SqlString.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
683 value is SqlString? (SqlString)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
684 Convert.ToSqlString(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
685 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
686
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
687 public virtual SqlBinary ConvertToSqlBinary(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
688 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
689 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
690 value == null || value is DBNull? SqlBinary.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
691 value is SqlBinary? (SqlBinary)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
692 Convert.ToSqlBinary(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
693 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
694
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
695 public virtual SqlGuid ConvertToSqlGuid(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
696 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
697 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
698 value == null || value is DBNull? SqlGuid.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
699 value is SqlGuid? (SqlGuid)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
700 Convert.ToSqlGuid(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
701 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
702
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
703 public virtual SqlBytes ConvertToSqlBytes(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
704 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
705 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
706 value == null || value is DBNull? SqlBytes.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
707 value is SqlBytes? (SqlBytes)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
708 Convert.ToSqlBytes(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
709 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
710
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
711 public virtual SqlChars ConvertToSqlChars(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
712 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
713 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
714 value == null || value is DBNull? SqlChars.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
715 value is SqlChars? (SqlChars)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
716 Convert.ToSqlChars(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
717 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
718
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
719 public virtual SqlXml ConvertToSqlXml(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
720 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
721 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
722 value == null || value is DBNull? SqlXml.Null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
723 value is SqlXml? (SqlXml)value:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
724 Convert.ToSqlXml(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
725 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
726
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
727 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
728
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
729 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
730
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
731 #region General case
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
732
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
733 public virtual T GetDefaultNullValue<T>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
734 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
735 switch (Type.GetTypeCode(typeof(T)))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
736 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
737 case TypeCode.Boolean: return (T)(object)DefaultBooleanNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
738 case TypeCode.Byte: return (T)(object)DefaultByteNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
739 case TypeCode.Char: return (T)(object)DefaultCharNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
740 case TypeCode.DateTime: return (T)(object)DefaultDateTimeNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
741 case TypeCode.Decimal: return (T)(object)DefaultDecimalNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
742 case TypeCode.Double: return (T)(object)DefaultDoubleNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
743 case TypeCode.Int16: return (T)(object)DefaultInt16NullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
744 case TypeCode.Int32: return (T)(object)DefaultInt32NullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
745 case TypeCode.Int64: return (T)(object)DefaultInt64NullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
746 case TypeCode.SByte: return (T)(object)DefaultSByteNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
747 case TypeCode.Single: return (T)(object)DefaultSingleNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
748 case TypeCode.String: return (T)(object)DefaultStringNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
749 case TypeCode.UInt16: return (T)(object)DefaultUInt16NullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
750 case TypeCode.UInt32: return (T)(object)DefaultUInt32NullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
751 case TypeCode.UInt64: return (T)(object)DefaultUInt64NullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
752 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
753
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
754 if (typeof(Guid) == typeof(T)) return (T)(object)DefaultGuidNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
755 if (typeof(Stream) == typeof(T)) return (T)(object)DefaultStreamNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
756 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
757 if (typeof(XmlReader) == typeof(T)) return (T)(object)DefaultXmlReaderNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
758 if (typeof(XmlDocument) == typeof(T)) return (T)(object)DefaultXmlDocumentNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
759 if (typeof(XElement) == typeof(T)) return (T)(object)DefaultXElementNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
760 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
761 if (typeof(DateTimeOffset) == typeof(T)) return (T)(object)DefaultDateTimeOffsetNullValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
762
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
763 return default(T);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
764 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
765
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
766 public virtual T ConvertTo<T,TP>(TP value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
767 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
768 return Equals(value, default(TP))?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
769 GetDefaultNullValue<T>():
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
770 Convert<T,TP>.From(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
771 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
772
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
773 public virtual object ConvertChangeType(object value, Type conversionType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
774 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
775 return ConvertChangeType(value, conversionType, TypeHelper.IsNullable(conversionType));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
776 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
777
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
778 public virtual object ConvertChangeType(object value, Type conversionType, bool isNullable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
779 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
780 if (conversionType.IsArray)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
781 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
782 if (null == value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
783 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
784
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
785 Type srcType = value.GetType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
786
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
787 if (srcType == conversionType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
788 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
789
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
790 if (srcType.IsArray)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
791 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
792 Type srcElementType = srcType.GetElementType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
793 Type dstElementType = conversionType.GetElementType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
794
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
795 if (srcElementType.IsArray != dstElementType.IsArray
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
796 || (srcElementType.IsArray &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
797 srcElementType.GetArrayRank() != dstElementType.GetArrayRank()))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
798 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
799 throw new InvalidCastException(string.Format(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
800 Resources.MappingSchema_IncompatibleArrayTypes,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
801 srcType.FullName, conversionType.FullName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
802 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
803
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
804 Array srcArray = (Array)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
805 Array dstArray;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
806
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
807 int rank = srcArray.Rank;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
808
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
809 if (rank == 1 && 0 == srcArray.GetLowerBound(0))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
810 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
811 int arrayLength = srcArray.Length;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
812
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
813 dstArray = Array.CreateInstance(dstElementType, arrayLength);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
814
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
815 // Int32 is assignable from UInt32, SByte from Byte and so on.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
816 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
817 if (dstElementType.IsAssignableFrom(srcElementType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
818 Array.Copy(srcArray, dstArray, arrayLength);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
819 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
820 for (int i = 0; i < arrayLength; ++i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
821 dstArray.SetValue(ConvertChangeType(srcArray.GetValue(i), dstElementType, isNullable), i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
822 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
823 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
824 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
825 #if SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
826 throw new InvalidOperationException();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
827 #else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
828 var arrayLength = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
829 var dimensions = new int[rank];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
830 var indices = new int[rank];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
831 var lbounds = new int[rank];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
832
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
833 for (int i = 0; i < rank; ++i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
834 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
835 arrayLength *= (dimensions[i] = srcArray.GetLength(i));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
836 lbounds[i] = srcArray.GetLowerBound(i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
837 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
838
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
839 dstArray = Array.CreateInstance(dstElementType, dimensions, lbounds);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
840
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
841 for (int i = 0; i < arrayLength; ++i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
842 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
843 var index = i;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
844
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
845 for (var j = rank - 1; j >= 0; --j)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
846 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
847 indices[j] = index % dimensions[j] + lbounds[j];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
848 index /= dimensions[j];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
849 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
850
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
851 dstArray.SetValue(ConvertChangeType(srcArray.GetValue(indices), dstElementType, isNullable), indices);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
852 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
853
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
854 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
855 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
856
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
857 return dstArray;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
858 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
859 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
860 else if (conversionType.IsEnum)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
861 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
862 return MapValueToEnum(value, conversionType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
863 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
864
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
865 if (isNullable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
866 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
867 if (TypeHelper.IsNullable(conversionType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
868 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
869 // Return a null reference or boxed not null value.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
870 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
871 return value == null || value is DBNull? null:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
872 ConvertChangeType(value, conversionType.GetGenericArguments()[0]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
873 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
874
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
875 Type type = conversionType.IsEnum? Enum.GetUnderlyingType(conversionType): conversionType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
876
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
877 switch (Type.GetTypeCode(type))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
878 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
879 case TypeCode.Boolean: return ConvertToNullableBoolean (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
880 case TypeCode.Byte: return ConvertToNullableByte (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
881 case TypeCode.Char: return ConvertToNullableChar (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
882 case TypeCode.DateTime: return ConvertToNullableDateTime(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
883 case TypeCode.Decimal: return ConvertToNullableDecimal (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
884 case TypeCode.Double: return ConvertToNullableDouble (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
885 case TypeCode.Int16: return ConvertToNullableInt16 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
886 case TypeCode.Int32: return ConvertToNullableInt32 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
887 case TypeCode.Int64: return ConvertToNullableInt64 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
888 case TypeCode.SByte: return ConvertToNullableSByte (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
889 case TypeCode.Single: return ConvertToNullableSingle (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
890 case TypeCode.UInt16: return ConvertToNullableUInt16 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
891 case TypeCode.UInt32: return ConvertToNullableUInt32 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
892 case TypeCode.UInt64: return ConvertToNullableUInt64 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
893 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
894
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
895 if (typeof(Guid) == conversionType) return ConvertToNullableGuid(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
896 if (typeof(DateTimeOffset) == conversionType) return ConvertToNullableDateTimeOffset(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
897 if (typeof(TimeSpan) == conversionType) return ConvertToNullableTimeSpan(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
898 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
899
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
900 switch (Type.GetTypeCode(conversionType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
901 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
902 case TypeCode.Boolean: return ConvertToBoolean (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
903 case TypeCode.Byte: return ConvertToByte (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
904 case TypeCode.Char: return ConvertToChar (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
905 case TypeCode.DateTime: return ConvertToDateTime(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
906 case TypeCode.Decimal: return ConvertToDecimal (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
907 case TypeCode.Double: return ConvertToDouble (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
908 case TypeCode.Int16: return ConvertToInt16 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
909 case TypeCode.Int32: return ConvertToInt32 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
910 case TypeCode.Int64: return ConvertToInt64 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
911 case TypeCode.SByte: return ConvertToSByte (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
912 case TypeCode.Single: return ConvertToSingle (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
913 case TypeCode.String: return ConvertToString (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
914 case TypeCode.UInt16: return ConvertToUInt16 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
915 case TypeCode.UInt32: return ConvertToUInt32 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
916 case TypeCode.UInt64: return ConvertToUInt64 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
917 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
918
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
919 if (typeof(Guid) == conversionType) return ConvertToGuid (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
920 if (typeof(Stream) == conversionType) return ConvertToStream (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
921 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
922 if (typeof(XmlReader) == conversionType) return ConvertToXmlReader (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
923 if (typeof(XmlDocument) == conversionType) return ConvertToXmlDocument (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
924 if (typeof(XElement) == conversionType) return ConvertToXElement (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
925 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
926 if (typeof(byte[]) == conversionType) return ConvertToByteArray (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
927 if (typeof(Binary) == conversionType) return ConvertToLinqBinary (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
928 if (typeof(DateTimeOffset) == conversionType) return ConvertToDateTimeOffset(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
929 if (typeof(char[]) == conversionType) return ConvertToCharArray (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
930 if (typeof(TimeSpan) == conversionType) return ConvertToTimeSpan (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
931
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
932 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
933
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
934 if (typeof(SqlInt32) == conversionType) return ConvertToSqlInt32 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
935 if (typeof(SqlString) == conversionType) return ConvertToSqlString (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
936 if (typeof(SqlDecimal) == conversionType) return ConvertToSqlDecimal (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
937 if (typeof(SqlDateTime) == conversionType) return ConvertToSqlDateTime (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
938 if (typeof(SqlBoolean) == conversionType) return ConvertToSqlBoolean (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
939 if (typeof(SqlMoney) == conversionType) return ConvertToSqlMoney (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
940 if (typeof(SqlGuid) == conversionType) return ConvertToSqlGuid (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
941 if (typeof(SqlDouble) == conversionType) return ConvertToSqlDouble (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
942 if (typeof(SqlByte) == conversionType) return ConvertToSqlByte (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
943 if (typeof(SqlInt16) == conversionType) return ConvertToSqlInt16 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
944 if (typeof(SqlInt64) == conversionType) return ConvertToSqlInt64 (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
945 if (typeof(SqlSingle) == conversionType) return ConvertToSqlSingle (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
946 if (typeof(SqlBinary) == conversionType) return ConvertToSqlBinary (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
947 if (typeof(SqlBytes) == conversionType) return ConvertToSqlBytes (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
948 if (typeof(SqlChars) == conversionType) return ConvertToSqlChars (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
949 if (typeof(SqlXml) == conversionType) return ConvertToSqlXml (value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
950
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
951 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
952
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
953 return System.Convert.ChangeType(value, conversionType, Thread.CurrentThread.CurrentCulture);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
954 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
955
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
956 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
957
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
958 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
959
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
960 #region Factory Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
961
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
962 public virtual DataReaderMapper CreateDataReaderMapper(IDataReader dataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
963 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
964 return new DataReaderMapper(this, dataReader);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
965 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
966
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
967 public virtual DataReaderListMapper CreateDataReaderListMapper(IDataReader reader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
968 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
969 return new DataReaderListMapper(CreateDataReaderMapper(reader));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
970 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
971
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
972 public virtual DataReaderMapper CreateDataReaderMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
973 IDataReader dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
974 NameOrIndexParameter nameOrIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
975 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
976 return new ScalarDataReaderMapper(this, dataReader, nameOrIndex);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
977 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
978
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
979 public virtual DataReaderListMapper CreateDataReaderListMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
980 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
981 NameOrIndexParameter nameOrIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
982 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
983 return new DataReaderListMapper(CreateDataReaderMapper(reader, nameOrIndex));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
984 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
985
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
986 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
987
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
988 public virtual DataRowMapper CreateDataRowMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
989 DataRow row,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
990 DataRowVersion version)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
991 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
992 return new DataRowMapper(row, version);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
993 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
994
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
995 public virtual DataTableMapper CreateDataTableMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
996 DataTable dataTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
997 DataRowVersion version)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
998 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
999 return new DataTableMapper(dataTable, CreateDataRowMapper(null, version));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1000 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1001
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1002 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1003
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1004 public virtual DictionaryMapper CreateDictionaryMapper(IDictionary dictionary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1005 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1006 return new DictionaryMapper(dictionary);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1007 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1008
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1009 public virtual DictionaryListMapper CreateDictionaryListMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1010 IDictionary dic,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1011 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1012 ObjectMapper objectMapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1013 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1014 return new DictionaryListMapper(dic, keyFieldNameOrIndex, objectMapper);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1015 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1016
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1017 public virtual DictionaryIndexListMapper CreateDictionaryListMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1018 IDictionary dic,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1019 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1020 ObjectMapper objectMapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1021 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1022 return new DictionaryIndexListMapper(dic, index, objectMapper);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1023 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1024
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1025 public virtual DictionaryListMapper<TK,T> CreateDictionaryListMapper<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1026 IDictionary<TK,T> dic,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1027 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1028 ObjectMapper objectMapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1029 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1030 return new DictionaryListMapper<TK,T>(dic, keyFieldNameOrIndex, objectMapper);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1031 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1032
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1033 public virtual DictionaryIndexListMapper<T> CreateDictionaryListMapper<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1034 IDictionary<CompoundValue,T> dic,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1035 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1036 ObjectMapper objectMapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1037 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1038 return new DictionaryIndexListMapper<T>(dic, index, objectMapper);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1039 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1040
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1041 public virtual EnumeratorMapper CreateEnumeratorMapper(IEnumerator enumerator)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1042 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1043 return new EnumeratorMapper(enumerator);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1044 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1045
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1046 public virtual ObjectListMapper CreateObjectListMapper(IList list, ObjectMapper objectMapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1047 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1048 return new ObjectListMapper(list, objectMapper);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1049 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1050
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1051 public virtual ScalarListMapper CreateScalarListMapper(IList list, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1052 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1053 return new ScalarListMapper(list, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1054 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1055
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1056 public virtual SimpleDestinationListMapper CreateScalarDestinationListMapper(IList list, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1057 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1058 return new SimpleDestinationListMapper(CreateScalarListMapper(list, type));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1059 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1060
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1061 public virtual SimpleSourceListMapper CreateScalarSourceListMapper(IList list, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1062 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1063 return new SimpleSourceListMapper(CreateScalarListMapper(list, type));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1064 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1065
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1066 public virtual ScalarListMapper<T> CreateScalarListMapper<T>(IList<T> list)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1067 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1068 return new ScalarListMapper<T>(this, list);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1069 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1070
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1071 public virtual SimpleDestinationListMapper CreateScalarDestinationListMapper<T>(IList<T> list)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1072 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1073 return new SimpleDestinationListMapper(CreateScalarListMapper<T>(list));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1074 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1075
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1076 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1077
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1078 #region GetNullValue
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1079
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1080 public virtual object GetNullValue(Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1081 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1082 return TypeAccessor.GetNullValue(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1083 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1084
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1085 public virtual bool IsNull(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1086 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1087 return TypeAccessor.IsNull(value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1088 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1089
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1090 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1091
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1092 #region GetMapValues
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1093
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1094 private readonly Dictionary<Type,MapValue[]> _mapValues = new Dictionary<Type,MapValue[]>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1095
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1096 public virtual MapValue[] GetMapValues([JetBrains.Annotations.NotNull] Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1097 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1098 if (type == null) throw new ArgumentNullException("type");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1099
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1100 lock (_mapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1101 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1102 MapValue[] mapValues;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1104 if (_mapValues.TryGetValue(type, out mapValues))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1105 return mapValues;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1107 var typeExt = TypeExtension.GetTypeExtension(type, Extensions);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1108 bool isSet;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1109
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1110 mapValues = MetadataProvider.GetMapValues(typeExt, type, out isSet);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1112 _mapValues.Add(type, mapValues);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1113
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1114 return mapValues;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1115 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1116 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1118 private readonly Dictionary<MemberAccessor, MapValue[]> _memberMapValues = new Dictionary<MemberAccessor, MapValue[]>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1120 private Type GetMapValueType(MapValue[] mapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1121 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1122 if (mapValues != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1124 var value = mapValues.SelectMany(mv => mv.MapValues).FirstOrDefault();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1125 if (value != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1126 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1127 return value.GetType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1128 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1129 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1130 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1131 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1132
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1133 public virtual MapValue[] GetMapValues([JetBrains.Annotations.NotNull] MemberAccessor memberAccessor)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1134 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1135 if (memberAccessor == null) throw new ArgumentNullException("memberAccessor");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1136
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1137 lock (_memberMapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1138 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1139 MapValue[] mapValues;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1140
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1141 if (_memberMapValues.TryGetValue(memberAccessor, out mapValues))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1142 return mapValues;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1144 var typeExt = TypeExtension.GetTypeExtension(memberAccessor.Type, Extensions);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1145 bool isSet;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1146
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1147 mapValues = MetadataProvider.GetMapValues(typeExt, memberAccessor, out isSet);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1148
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1149 _memberMapValues.Add(memberAccessor, mapValues);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1151 return mapValues;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1152 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1153 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1154
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1155 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1156
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1157 #region GetDefaultValue
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1159 private readonly Dictionary<Type,object> _defaultValues = new Dictionary<Type,object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1160
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1161 public virtual object GetDefaultValue([JetBrains.Annotations.NotNull] Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1162 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1163 if (type == null) throw new ArgumentNullException("type");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1164
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1165 lock (_defaultValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1166 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1167 object defaultValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1168
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1169 if (_defaultValues.TryGetValue(type, out defaultValue))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1170 return defaultValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1171
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1172 var typeExt = TypeExtension.GetTypeExtension(type, Extensions);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1173 bool isSet;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1175 defaultValue = MetadataProvider.GetDefaultValue(this, typeExt, type, out isSet);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1176
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1177 _defaultValues.Add(type, defaultValue = TypeExtension.ChangeType(defaultValue, type));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1178
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1179 return defaultValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1180 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1181 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1182
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1183 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1184
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1185 #region GetDataSource, GetDataDestination
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1187 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1188 public virtual IMapDataSource GetDataSource(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1189 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1190 if (obj == null) throw new ArgumentNullException("obj");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1191
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1192 if (obj is IMapDataSource)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1193 return (IMapDataSource)obj;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1194
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1195 if (obj is IDataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1196 return CreateDataReaderMapper((IDataReader)obj);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1198 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1199
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1200 if (obj is DataRow)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1201 return CreateDataRowMapper((DataRow)obj, DataRowVersion.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1202
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1203 if (obj is DataRowView)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1204 return CreateDataRowMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1205 ((DataRowView)obj).Row,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1206 ((DataRowView)obj).RowVersion);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1207
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1208 if (obj is DataTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1209 return CreateDataRowMapper(((DataTable)(obj)).Rows[0], DataRowVersion.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1210
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1211 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1212
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1213 if (obj is IDictionary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1214 return CreateDictionaryMapper((IDictionary)obj);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1215
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1216 return GetObjectMapper(obj.GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1217 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1218
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1219 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1220 public virtual IMapDataDestination GetDataDestination(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1221 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1222 if (obj == null) throw new ArgumentNullException("obj");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1223
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1224 if (obj is IMapDataDestination)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1225 return (IMapDataDestination)obj;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1226
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1227 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1228
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1229 if (obj is DataRow)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1230 return CreateDataRowMapper((DataRow)obj, DataRowVersion.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1231
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1232 if (obj is DataRowView)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1233 return CreateDataRowMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1234 ((DataRowView)obj).Row,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1235 ((DataRowView)obj).RowVersion);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1236
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1237 if (obj is DataTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1238 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1239 DataTable dt = obj as DataTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1240 DataRow dr = dt.NewRow();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1241
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1242 dt.Rows.Add(dr);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1243
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1244 return CreateDataRowMapper(dr, DataRowVersion.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1245 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1246
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1247 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1248
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1249 if (obj is IDictionary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1250 return CreateDictionaryMapper((IDictionary)obj);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1252 return GetObjectMapper(obj.GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1253 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1254
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1255 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1256 public virtual IMapDataSourceList GetDataSourceList(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1257 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1258 if (obj == null) throw new ArgumentNullException("obj");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1259
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1260 if (obj is IMapDataSourceList)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1261 return (IMapDataSourceList)obj;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1262
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1263 if (obj is IDataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1264 return CreateDataReaderListMapper((IDataReader)obj);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1265
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1266 Type type = obj.GetType().GetElementType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1267
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1268 return TypeHelper.IsScalar(type)?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1269 (IMapDataSourceList)CreateScalarSourceListMapper((IList)obj, type):
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1270 CreateObjectListMapper((IList)obj, CreateObjectMapper(type));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1271 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1272
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1273 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1274 public virtual IMapDataDestinationList GetDataDestinationList(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1275 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1276 if (obj == null) throw new ArgumentNullException("obj");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1277
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1278 if (obj is IMapDataDestinationList)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1279 return (IMapDataDestinationList)obj;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1280
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1281 Type type = obj.GetType().GetElementType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1282
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1283 return TypeHelper.IsScalar(type)?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1284 (IMapDataDestinationList)CreateScalarDestinationListMapper((IList)obj, type):
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1285 CreateObjectListMapper((IList)obj, CreateObjectMapper(type));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1286 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1287
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1288 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1289
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1290 #region ValueMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1291
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1292 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1293 public virtual IValueMapper DefaultValueMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1294 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1295 get { return ValueMapping.DefaultMapper; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1296 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1297
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1298 internal readonly Dictionary<Type,IValueMapper> SameTypeMappers = new Dictionary<Type,IValueMapper>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1299 internal readonly Dictionary<KeyValue,IValueMapper> DifferentTypeMappers = new Dictionary<KeyValue,IValueMapper>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1300
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1301 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1302 public void SetValueMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1303 Type sourceType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1304 Type destType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1305 IValueMapper mapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1306 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1307 if (sourceType == null) sourceType = typeof(object);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1308 if (destType == null) destType = typeof(object);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1309
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1310 if (sourceType == destType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1311 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1312 lock (SameTypeMappers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1313 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1314 if (mapper == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1315 SameTypeMappers.Remove(sourceType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1316 else if (SameTypeMappers.ContainsKey(sourceType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1317 SameTypeMappers[sourceType] = mapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1318 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1319 SameTypeMappers.Add(sourceType, mapper);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1320 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1321 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1322 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1323 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1324 KeyValue key = new KeyValue(sourceType, destType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1325
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1326 lock (DifferentTypeMappers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1327 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1328 if (mapper == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1329 DifferentTypeMappers.Remove(key);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1330 else if (DifferentTypeMappers.ContainsKey(key))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1331 DifferentTypeMappers[key] = mapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1332 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1333 DifferentTypeMappers.Add(key, mapper);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1334 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1335 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1336 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1337
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1338 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1339 protected internal virtual IValueMapper GetValueMapper(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1340 Type sourceType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1341 Type destType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1342 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1343 return ValueMapping.GetMapper(sourceType, destType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1344 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1345
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1346 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1347 internal protected IValueMapper[] GetValueMappers(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1348 IMapDataSource source,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1349 IMapDataDestination dest,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1350 int[] index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1351 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1352 IValueMapper[] mappers = new IValueMapper[index.Length];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1353
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1354 for (int i = 0; i < index.Length; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1355 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1356 int n = index[i];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1357
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1358 if (n < 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1359 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1360
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1361 if (!source.SupportsTypedValues(i) || !dest.SupportsTypedValues(n))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1362 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1363 mappers[i] = DefaultValueMapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1364 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1365 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1366
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1367 Type sourceType = source.GetFieldType(i);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1368 Type destType = dest. GetFieldType(n);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1369
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1370 if (sourceType == null) sourceType = typeof(object);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1371 if (destType == null) destType = typeof(object);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1372
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1373 IValueMapper t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1374
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1375 if (sourceType == destType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1376 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1377 lock (SameTypeMappers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1378 if (!SameTypeMappers.TryGetValue(sourceType, out t))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1379 SameTypeMappers.Add(sourceType, t = GetValueMapper(sourceType, destType));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1380 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1381 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1382 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1383 var key = new KeyValue(sourceType, destType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1384
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1385 lock (DifferentTypeMappers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1386 if (!DifferentTypeMappers.TryGetValue(key, out t))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1387 DifferentTypeMappers[key] = t = GetValueMapper(sourceType, destType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1388 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1389
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1390 mappers[i] = t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1391 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1392
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1393 return mappers;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1394 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1395
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1396 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1397
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1398 #region Base Mapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1399
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1400 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1401 internal protected static int[] GetIndex(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1402 IMapDataSource source,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1403 IMapDataDestination dest)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1404 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1405 int count = source.Count;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1406 int[] index = new int[count];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1407
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1408 for (int i = 0; i < count; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1409 index[i] = dest.GetOrdinal(source.GetName(i));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1410
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1411 return index;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1412 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1413
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1414 [CLSCompliant(false), Obsolete]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1415 protected static void MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1416 IMapDataSource source, object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1417 IMapDataDestination dest, object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1418 int[] index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1419 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1420 for (int i = 0; i < index.Length; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1421 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1422 int n = index[i];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1423
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1424 if (n >= 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1425 dest.SetValue(destObject, n, source.GetValue(sourceObject, i));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1426 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1427 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1428
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1429 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1430 internal protected static void MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1431 IMapDataSource source, object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1432 IMapDataDestination dest, object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1433 int[] index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1434 IValueMapper[] mappers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1435 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1436 for (int i = 0; i < index.Length; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1437 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1438 int n = index[i];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1439
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1440 if (n >= 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1441 mappers[i].Map(source, sourceObject, i, dest, destObject, n);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1442 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1443 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1444
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1445 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1446 protected virtual void MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1447 InitContext initContext,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1448 IMapDataSource source, object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1449 IMapDataDestination dest, object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1450 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1451 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1452 ISupportMapping smSource = sourceObject as ISupportMapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1453 ISupportMapping smDest = destObject as ISupportMapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1454
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1455 if (smSource != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1456 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1457 if (initContext == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1458 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1459 initContext = new InitContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1460
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1461 initContext.MappingSchema = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1462 initContext.DataSource = source;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1463 initContext.SourceObject = sourceObject;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1464 initContext.ObjectMapper = dest as ObjectMapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1465 initContext.Parameters = parameters;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1466 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1467
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1468 initContext.IsSource = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1469 smSource.BeginMapping(initContext);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1470 initContext.IsSource = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1471
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1472 if (initContext.StopMapping)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1473 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1474 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1475
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1476 if (smDest != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1477 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1478 if (initContext == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1479 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1480 initContext = new InitContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1481
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1482 initContext.MappingSchema = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1483 initContext.DataSource = source;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1484 initContext.SourceObject = sourceObject;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1485 initContext.ObjectMapper = dest as ObjectMapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1486 initContext.Parameters = parameters;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1487 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1488
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1489 smDest.BeginMapping(initContext);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1490
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1491 if (initContext.StopMapping)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1492 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1493
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1494 if (dest != initContext.ObjectMapper && initContext.ObjectMapper != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1495 dest = initContext.ObjectMapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1496 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1497
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1498 int[] index = GetIndex (source, dest);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1499 IValueMapper[] mappers = GetValueMappers(source, dest, index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1500
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1501 MapInternal(source, sourceObject, dest, destObject, index, mappers);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1502
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1503 if (smDest != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1504 smDest.EndMapping(initContext);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1505
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1506 if (smSource != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1507 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1508 initContext.IsSource = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1509 smSource.EndMapping(initContext);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1510 initContext.IsSource = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1511 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1512 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1513
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1514 protected virtual object MapInternal(InitContext initContext)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1515 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1516 object dest = initContext.ObjectMapper.CreateInstance(initContext);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1517
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1518 if (initContext.StopMapping == false)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1519 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1520 MapInternal(initContext,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1521 initContext.DataSource, initContext.SourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1522 initContext.ObjectMapper, dest,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1523 initContext.Parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1524 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1525
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1526 return dest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1527 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1528
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1529 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1530 public void MapSourceToDestination(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1531 IMapDataSource source, object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1532 IMapDataDestination dest, object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1533 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1534 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1535 MapInternal(null, source, sourceObject, dest, destObject, parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1536 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1537
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1538 public void MapSourceToDestination(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1539 object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1540 object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1541 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1542 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1543 IMapDataSource source = GetDataSource (sourceObject);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1544 IMapDataDestination dest = GetDataDestination(destObject);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1545
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1546 MapInternal(null, source, sourceObject, dest, destObject, parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1547 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1548
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1549 private static readonly ObjectMapper _nullMapper = new ObjectMapper();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1550
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1551 private class MapInfo
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1552 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1553 public int[] Index;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1554 public IValueMapper[] Mappers;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1555 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1556
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1557 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1558 public virtual void MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1559 IMapDataSourceList dataSourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1560 IMapDataDestinationList dataDestinationList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1561 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1562 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1563 if (dataSourceList == null) throw new ArgumentNullException("dataSourceList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1564 if (dataDestinationList == null) throw new ArgumentNullException("dataDestinationList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1565
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1566 Dictionary<ObjectMapper,MapInfo> infos = new Dictionary<ObjectMapper,MapInfo>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1567
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1568 InitContext ctx = new InitContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1569
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1570 ctx.MappingSchema = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1571 ctx.Parameters = parameters;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1572
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1573 dataSourceList. InitMapping(ctx); if (ctx.StopMapping) return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1574 dataDestinationList.InitMapping(ctx); if (ctx.StopMapping) return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1575
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1576 int[] index = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1577 IValueMapper[] mappers = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1578 ObjectMapper current = _nullMapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1579 IMapDataDestination dest = dataDestinationList.GetDataDestination(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1580 ObjectMapper om = dest as ObjectMapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1581
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1582 while (dataSourceList.SetNextDataSource(ctx))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1583 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1584 ctx.ObjectMapper = om;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1585 ctx.StopMapping = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1586
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1587 object destObject = dataDestinationList.GetNextObject(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1588
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1589 if (ctx.StopMapping) continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1590
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1591 ISupportMapping smSource = ctx.SourceObject as ISupportMapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1592 ISupportMapping smDest = destObject as ISupportMapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1593
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1594 if (smSource != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1595 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1596 ctx.IsSource = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1597 smSource.BeginMapping(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1598 ctx.IsSource = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1599
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1600 if (ctx.StopMapping)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1601 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1602 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1603
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1604 if (smDest != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1605 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1606 smDest.BeginMapping(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1607
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1608 if (ctx.StopMapping)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1609 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1610 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1611
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1612 IMapDataDestination currentDest = current ?? dest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1613
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1614 if (current != ctx.ObjectMapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1615 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1616 current = ctx.ObjectMapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1617 currentDest = current ?? dest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1618
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1619 if (current != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1620 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1621 MapInfo info;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1622 if (!infos.TryGetValue(current, out info))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1623 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1624 info = new MapInfo();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1625
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1626 info.Index = GetIndex(ctx.DataSource, currentDest);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1627 info.Mappers = GetValueMappers(ctx.DataSource, currentDest, info.Index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1628
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1629 infos.Add(current, info);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1630 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1631
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1632 index = info.Index;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1633 mappers = info.Mappers;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1634 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1635 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1636 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1637 index = GetIndex(ctx.DataSource, currentDest);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1638 mappers = GetValueMappers(ctx.DataSource, currentDest, index);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1639 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1640 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1641
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1642 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1643 ctx.DataSource,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1644 ctx.SourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1645 currentDest,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1646 destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1647 index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1648 mappers);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1649
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1650 if (smDest != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1651 smDest.EndMapping(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1652
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1653 if (smSource != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1654 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1655 ctx.IsSource = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1656 smSource.EndMapping(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1657 ctx.IsSource = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1658 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1659 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1660
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1661 dataDestinationList.EndMapping(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1662 dataSourceList. EndMapping(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1663 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1664
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1665 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1666
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1667 #region ValueToEnum, EnumToValue
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1668
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1669 [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1670 public virtual object MapValueToEnum(object value, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1671 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1672 if (value == null || value == DBNull.Value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1673 return GetNullValue(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1674
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1675 MapValue[] mapValues = GetMapValues(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1676
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1677 var mapValueType = GetMapValueType(mapValues);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1678 if (mapValueType != null && value.GetType() != mapValueType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1679 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1680 value = ConvertChangeType(value, mapValueType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1681 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1682
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1683 if (mapValues != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1684 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1685 var comp = (IComparable)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1686
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1687 foreach (MapValue mv in mapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1688 foreach (object mapValue in mv.MapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1689 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1690 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1691 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1692 if (comp.CompareTo(mapValue) == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1693 return mv.OrigValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1694 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1695 catch (ArgumentException ex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1696 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1697 Debug.WriteLine(ex.Message, MethodBase.GetCurrentMethod().Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1698 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1699 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1700 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1701
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1702 InvalidCastException exInvalidCast = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1703
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1704 var enumType = TypeHelper.UnwrapNullableType(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1705 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1706 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1707 value = ConvertChangeType(value, Enum.GetUnderlyingType(enumType));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1708
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1709 if (Enum.IsDefined(enumType, value))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1710 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1711 // Regular (known) enum field w/o explicit mapping defined.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1712 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1713 return Enum.ToObject(enumType, value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1714 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1715 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1716 catch (InvalidCastException ex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1717 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1718 exInvalidCast = ex;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1719 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1720
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1721 // Default value.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1722 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1723 object defaultValue = GetDefaultValue(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1724
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1725 if (defaultValue != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1726 return defaultValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1727
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1728 if (exInvalidCast != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1729 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1730 // Rethrow an InvalidCastException when no default value specified.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1731 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1732 throw exInvalidCast;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1733 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1734
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1735 // At this point we have an undefined enum value.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1736 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1737 return Enum.ToObject(enumType, value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1738 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1739
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1740 [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1741 public virtual object MapValueToEnum(object value, MemberAccessor ma)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1742 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1743 if (value == null || value is DBNull)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1744 return GetNullValue(ma.Type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1745
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1746 MapValue[] mapValues = GetMapValues(ma);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1747
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1748 var mapValueType = GetMapValueType(mapValues);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1749 if (mapValueType != null && value.GetType() != mapValueType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1750 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1751 value = ConvertChangeType(value, mapValueType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1752 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1753
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1754 if (mapValues != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1755 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1756 var comp = (IComparable)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1757
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1758 foreach (MapValue mv in mapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1759 foreach (object mapValue in mv.MapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1760 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1761 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1762 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1763 if (comp.CompareTo(mapValue) == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1764 return mv.OrigValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1765 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1766 catch (ArgumentException ex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1767 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1768 Debug.WriteLine(ex.Message, MethodBase.GetCurrentMethod().Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1769 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1770 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1771 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1772
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1773 InvalidCastException exInvalidCast = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1774
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1775 var enumType = TypeHelper.UnwrapNullableType(ma.Type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1776 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1777 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1778 value = ConvertChangeType(value, Enum.GetUnderlyingType(enumType));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1779
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1780 if (Enum.IsDefined(enumType, value))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1781 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1782 // Regular (known) enum field w/o explicit mapping defined.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1783 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1784 return Enum.ToObject(enumType, value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1785 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1786 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1787 catch (InvalidCastException ex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1788 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1789 exInvalidCast = ex;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1790 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1791
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1792 // Default value.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1793 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1794 object defaultValue = GetDefaultValue(ma.Type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1795
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1796 if (defaultValue != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1797 return defaultValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1798
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1799 if (exInvalidCast != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1800 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1801 // Rethrow an InvalidCastException when no default value specified.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1802 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1803 throw exInvalidCast;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1804 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1805
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1806 // At this point we have an undefined enum value.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1807 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1808 return Enum.ToObject(enumType, value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1809 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1810
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1811 [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1812 public virtual object MapEnumToValue(object value, [JetBrains.Annotations.NotNull] Type type, bool convertToUnderlyingType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1813 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1814 if (value == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1815 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1816
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1817 if (type == null) throw new ArgumentNullException("type");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1818
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1819 type = value.GetType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1820
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1821 object nullValue = GetNullValue(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1822
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1823 if (nullValue != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1824 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1825 IComparable comp = (IComparable)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1826
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1827 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1828 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1829 if (comp.CompareTo(nullValue) == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1830 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1831 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1832 catch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1833 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1834 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1835 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1836
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1837 MapValue[] mapValues = GetMapValues(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1838
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1839 if (mapValues != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1840 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1841 IComparable comp = (IComparable)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1842
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1843 foreach (MapValue mv in mapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1844 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1845 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1846 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1847 if (comp.CompareTo(mv.OrigValue) == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1848 return mv.MapValues[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1849 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1850 catch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1851 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1852 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1853 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1854 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1855
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1856 return convertToUnderlyingType ?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1857 System.Convert.ChangeType(value, Enum.GetUnderlyingType(type), Thread.CurrentThread.CurrentCulture) :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1858 value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1859 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1860
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1861 [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1862 public virtual object MapEnumToValue(object value, [JetBrains.Annotations.NotNull] MemberAccessor memberAccessor, bool convertToUnderlyingType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1863 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1864 if (value == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1865 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1866
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1867 if (memberAccessor == null) throw new ArgumentNullException("memberAccessor");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1868
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1869 if (value is IEnumerable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1870 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1871 #if SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1872 var result = new List<object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1873
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1874 foreach (var item in (IEnumerable)value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1875 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1876 result.Add(MapEnumToValue(item, memberAccessor, convertToUnderlyingType));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1877 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1878
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1879 var type = typeof(object);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1880
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1881 foreach (var var in result)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1882 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1883 if (var != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1884 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1885 type = var.GetType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1886 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1887 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1888 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1889
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1890 var arr = Array.CreateInstance(type, result.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1891
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1892 Array.Copy(result.ToArray(), arr, arr.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1893
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1894 return arr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1895 #else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1896 var result = new ArrayList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1897
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1898 foreach (var item in (IEnumerable)value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1899 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1900 result.Add(MapEnumToValue(item, memberAccessor, convertToUnderlyingType));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1901 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1902
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1903 var type = typeof(object);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1904
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1905 foreach (var var in result)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1906 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1907 if (var != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1908 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1909 type = var.GetType();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1910 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1911 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1912 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1913
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1914 return result.ToArray(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1915 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1916 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1917
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1918 object nullValue = GetNullValue(memberAccessor.Type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1919
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1920 if (nullValue != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1921 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1922 IComparable comp = (IComparable)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1923
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1924 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1925 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1926 if (comp.CompareTo(nullValue) == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1927 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1928 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1929 catch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1930 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1931 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1932 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1933
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1934 MapValue[] mapValues = GetMapValues(memberAccessor);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1935
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1936 if (mapValues != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1937 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1938 IComparable comp = (IComparable)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1939
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1940 foreach (MapValue mv in mapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1941 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1942 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1943 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1944 if (comp.CompareTo(mv.OrigValue) == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1945 return mv.MapValues[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1946 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1947 catch
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1948 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1949 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1950 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1951 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1952
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1953 var memberAccessorType = TypeHelper.UnwrapNullableType(memberAccessor.Type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1954
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1955 return convertToUnderlyingType ?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1956 System.Convert.ChangeType(value, Enum.GetUnderlyingType(memberAccessorType), Thread.CurrentThread.CurrentCulture) :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1957 value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1958 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1959
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1960 [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1961 public virtual object MapEnumToValue(object value, bool convertToUnderlyingType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1962 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1963 if (value == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1964 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1965
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1966 return MapEnumToValue(value, value.GetType(), convertToUnderlyingType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1967 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1968
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1969 public object MapEnumToValue(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1970 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1971 return MapEnumToValue(value, false);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1972 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1973
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1974 public virtual object MapEnumToValue(object value, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1975 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1976 return MapEnumToValue(value, type, false);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1977 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1978
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1979 public T MapValueToEnum<T>(object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1980 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1981 return (T)MapValueToEnum(value, typeof(T));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1982 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1983
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1984 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1985
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1986 #region Object
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1987
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1988 #region MapObjectToObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1989
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1990 public object MapObjectToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1991 object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1992 object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1993 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1994 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1995 if (sourceObject == null) throw new ArgumentNullException("sourceObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1996 if (destObject == null) throw new ArgumentNullException("destObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1997
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1998 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1999 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2000 GetObjectMapper(sourceObject.GetType()), sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2001 GetObjectMapper(destObject. GetType()), destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2002 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2003
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2004 return destObject;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2005 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2006
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2007 public object MapObjectToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2008 object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2009 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2010 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2011 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2012 if (sourceObject == null) throw new ArgumentNullException("sourceObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2013
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2014 InitContext ctx = new InitContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2015
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2016 ctx.MappingSchema = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2017 ctx.DataSource = GetObjectMapper(sourceObject.GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2018 ctx.SourceObject = sourceObject;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2019 ctx.ObjectMapper = GetObjectMapper(destObjectType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2020 ctx.Parameters = parameters;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2021
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2022 return MapInternal(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2023 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2024
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2025 public T MapObjectToObject<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2026 object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2027 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2028 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2029 return (T)MapObjectToObject(sourceObject, typeof(T), parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2030 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2031
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2032 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2033
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2034 #region MapObjectToDataRow
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2035
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2036 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2037
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2038 public DataRow MapObjectToDataRow(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2039 object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2040 DataRow destRow)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2041 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2042 if (sourceObject == null) throw new ArgumentNullException("sourceObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2043
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2044 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2045 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2046 GetObjectMapper (sourceObject.GetType()), sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2047 CreateDataRowMapper(destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2048 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2049
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2050 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2051 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2052
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2053 public DataRow MapObjectToDataRow(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2054 object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2055 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2056 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2057 if (destTable == null) throw new ArgumentNullException("destTable");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2058 if (sourceObject == null) throw new ArgumentNullException("sourceObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2059
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2060 DataRow destRow = destTable.NewRow();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2061
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2062 destTable.Rows.Add(destRow);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2063
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2064 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2065 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2066 GetObjectMapper (sourceObject.GetType()), sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2067 CreateDataRowMapper(destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2068 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2069
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2070 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2071 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2072
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2073 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2074
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2075 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2076
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2077 #region MapObjectToDictionary
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2078
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2079 public IDictionary MapObjectToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2080 object sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2081 IDictionary destDictionary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2082 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2083 if (sourceObject == null) throw new ArgumentNullException("sourceObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2084
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2085 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2086 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2087 GetObjectMapper (sourceObject.GetType()), sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2088 CreateDictionaryMapper(destDictionary), destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2089 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2090
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2091 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2092 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2093
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2094 public IDictionary MapObjectToDictionary(object sourceObject)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2095 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2096 if (sourceObject == null) throw new ArgumentNullException("sourceObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2097
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2098 ObjectMapper om = GetObjectMapper(sourceObject.GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2099
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2100 var destDictionary = new Dictionary<object,object>(om.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2101
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2102 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2103 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2104 om, sourceObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2105 CreateDictionaryMapper(destDictionary), destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2106 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2108 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2109 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2111 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2112
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2113 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2115 #region DataRow
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2117 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2118
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2119 #region MapDataRowToObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2120
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2121 public object MapDataRowToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2122 DataRow dataRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2123 object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2124 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2125 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2126 if (destObject == null) throw new ArgumentNullException("destObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2128 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2129 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2130 CreateDataRowMapper(dataRow, DataRowVersion.Default), dataRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2131 GetObjectMapper(destObject. GetType()), destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2132 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2133
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2134 return destObject;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2135 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2136
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2137 public object MapDataRowToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2138 DataRow dataRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2139 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2140 object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2141 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2142 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2143 if (destObject == null) throw new ArgumentNullException("destObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2144
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2145 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2146 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2147 CreateDataRowMapper(dataRow, version), dataRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2148 GetObjectMapper(destObject. GetType()), destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2149 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2151 return destObject;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2152 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2153
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2154 public object MapDataRowToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2155 DataRow dataRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2156 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2157 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2158 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2159 InitContext ctx = new InitContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2160
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2161 ctx.MappingSchema = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2162 ctx.DataSource = CreateDataRowMapper(dataRow, DataRowVersion.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2163 ctx.SourceObject = dataRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2164 ctx.ObjectMapper = GetObjectMapper(destObjectType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2165 ctx.Parameters = parameters;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2166
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2167 return MapInternal(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2168 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2169
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2170 public object MapDataRowToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2171 DataRow dataRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2172 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2173 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2174 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2175 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2176 InitContext ctx = new InitContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2177
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2178 ctx.MappingSchema = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2179 ctx.DataSource = CreateDataRowMapper(dataRow, version);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2180 ctx.SourceObject = dataRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2181 ctx.ObjectMapper = GetObjectMapper(destObjectType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2182 ctx.Parameters = parameters;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2184 return MapInternal(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2185 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2187 public T MapDataRowToObject<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2188 DataRow dataRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2189 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2190 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2191 return (T)MapDataRowToObject(dataRow, typeof(T), parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2192 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2193
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2194 public T MapDataRowToObject<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2195 DataRow dataRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2196 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2197 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2198 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2199 return (T)MapDataRowToObject(dataRow, version, typeof(T), parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2200 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2201
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2202 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2203
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2204 #region MapDataRowToDataRow
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2205
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2206 public DataRow MapDataRowToDataRow(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2207 DataRow sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2208 DataRow destRow)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2209 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2210 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2211 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2212 CreateDataRowMapper(sourceRow, DataRowVersion.Default), sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2213 CreateDataRowMapper(destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2214 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2215
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2216 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2217 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2218
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2219 public DataRow MapDataRowToDataRow(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2220 DataRow sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2221 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2222 DataRow destRow)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2223 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2224 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2225 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2226 CreateDataRowMapper(sourceRow, version), sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2227 CreateDataRowMapper(destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2228 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2229
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2230 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2231 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2232
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2233 public DataRow MapDataRowToDataRow(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2234 DataRow sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2235 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2236 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2237 if (destTable == null) throw new ArgumentNullException("destTable");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2238
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2239 DataRow destRow = destTable.NewRow();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2240
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2241 destTable.Rows.Add(destRow);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2242
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2243 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2244 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2245 CreateDataRowMapper(sourceRow, DataRowVersion.Default), sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2246 CreateDataRowMapper(destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2247 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2248
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2249 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2250 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2252 public DataRow MapDataRowToDataRow(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2253 DataRow sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2254 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2255 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2256 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2257 if (destTable == null) throw new ArgumentNullException("destTable");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2259 DataRow destRow = destTable.NewRow();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2260
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2261 destTable.Rows.Add(destRow);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2262
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2263 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2264 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2265 CreateDataRowMapper(sourceRow, version), sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2266 CreateDataRowMapper(destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2267 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2268
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2269 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2270 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2271
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2272 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2273
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2274 #region MapDataRowToDictionary
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2275
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2276 public IDictionary MapDataRowToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2277 DataRow sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2278 IDictionary destDictionary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2279 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2280 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2281 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2282 CreateDataRowMapper (sourceRow, DataRowVersion.Default), sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2283 CreateDictionaryMapper(destDictionary), destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2284 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2285
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2286 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2287 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2288
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2289 public Hashtable MapDataRowToDictionary(DataRow sourceRow)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2290 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2291 if (sourceRow == null) throw new ArgumentNullException("sourceRow");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2292
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2293 Hashtable destDictionary = new Hashtable(sourceRow.Table.Columns.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2294
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2295 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2296 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2297 CreateDataRowMapper (sourceRow, DataRowVersion.Default), sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2298 CreateDictionaryMapper(destDictionary), destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2299 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2300
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2301 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2302 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2303
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2304 public IDictionary MapDataRowToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2305 DataRow sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2306 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2307 IDictionary destDictionary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2308 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2309 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2310 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2311 CreateDataRowMapper (sourceRow, version), sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2312 CreateDictionaryMapper(destDictionary), destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2313 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2314
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2315 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2316 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2317
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2318 public Hashtable MapDataRowToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2319 DataRow sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2320 DataRowVersion version)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2321 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2322 if (sourceRow == null) throw new ArgumentNullException("sourceRow");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2323
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2324 Hashtable destDictionary = new Hashtable(sourceRow.Table.Columns.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2325
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2326 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2327 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2328 CreateDataRowMapper (sourceRow, version), sourceRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2329 CreateDictionaryMapper(destDictionary), destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2330 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2331
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2332 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2333 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2334
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2335 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2336
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2337 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2338
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2339 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2340
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2341 #region DataReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2342
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2343 #region MapDataReaderToObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2344
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2345 public object MapDataReaderToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2346 IDataReader dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2347 object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2348 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2349 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2350 if (destObject == null) throw new ArgumentNullException("destObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2351
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2352 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2353 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2354 CreateDataReaderMapper(dataReader), dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2355 GetObjectMapper(destObject. GetType()), destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2356 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2357
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2358 return destObject;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2359 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2360
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2361 //NOTE changed to virtual
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2362 public virtual object MapDataReaderToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2363 IDataReader dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2364 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2365 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2366 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2367 InitContext ctx = new InitContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2368
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2369 ctx.MappingSchema = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2370 ctx.DataSource = CreateDataReaderMapper(dataReader);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2371 ctx.SourceObject = dataReader;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2372 ctx.ObjectMapper = GetObjectMapper(destObjectType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2373 ctx.Parameters = parameters;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2374
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2375 return MapInternal(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2376 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2377
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2378 public T MapDataReaderToObject<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2379 IDataReader dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2380 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2381 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2382 return (T)MapDataReaderToObject(dataReader, typeof(T), parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2383 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2384
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2385 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2386
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2387 #region MapDataReaderToDataRow
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2388
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2389 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2390
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2391 public DataRow MapDataReaderToDataRow(IDataReader dataReader, DataRow destRow)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2392 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2393 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2394 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2395 CreateDataReaderMapper(dataReader), dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2396 CreateDataRowMapper(destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2397 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2398
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2399 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2400 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2401
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2402 public DataRow MapDataReaderToDataRow(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2403 IDataReader dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2404 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2405 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2406 if (destTable == null) throw new ArgumentNullException("destTable");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2407
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2408 DataRow destRow = destTable.NewRow();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2409
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2410 destTable.Rows.Add(destRow);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2411
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2412 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2413 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2414 CreateDataReaderMapper(dataReader), dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2415 CreateDataRowMapper(destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2416 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2417
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2418 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2419 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2420
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2421 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2422
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2423 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2424
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2425 #region MapDataReaderToDictionary
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2426
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2427 public IDictionary MapDataReaderToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2428 IDataReader dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2429 IDictionary destDictionary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2430 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2431 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2432 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2433 CreateDataReaderMapper(dataReader), dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2434 CreateDictionaryMapper(destDictionary), destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2435 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2436
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2437 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2438 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2439
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2440 public IDictionary MapDataReaderToDictionary(IDataReader dataReader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2441 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2442 if (dataReader == null) throw new ArgumentNullException("dataReader");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2443
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2444 var destDictionary = new Dictionary<object,object>(dataReader.FieldCount);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2445
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2446 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2447 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2448 CreateDataReaderMapper(dataReader), dataReader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2449 CreateDictionaryMapper(destDictionary), destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2450 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2451
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2452 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2453 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2454
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2455 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2456
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2457 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2458
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2459 #region Dictionary
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2460
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2461 #region MapDictionaryToObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2462
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2463 public object MapDictionaryToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2464 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2465 object destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2466 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2467 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2468 if (destObject == null) throw new ArgumentNullException("destObject");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2469
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2470 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2471 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2472 CreateDictionaryMapper(sourceDictionary), sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2473 GetObjectMapper (destObject. GetType()), destObject,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2474 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2475
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2476 return destObject;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2477 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2478
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2479 public object MapDictionaryToObject(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2480 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2481 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2482 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2483 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2484 InitContext ctx = new InitContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2485
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2486 ctx.MappingSchema = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2487 ctx.DataSource = CreateDictionaryMapper(sourceDictionary);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2488 ctx.SourceObject = sourceDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2489 ctx.ObjectMapper = GetObjectMapper(destObjectType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2490 ctx.Parameters = parameters;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2491
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2492 return MapInternal(ctx);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2493 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2494
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2495 public T MapDictionaryToObject<T>(IDictionary sourceDictionary, params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2496 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2497 return (T)MapDictionaryToObject(sourceDictionary, typeof(T), parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2498 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2499
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2500 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2501
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2502 #region MapDictionaryToDataRow
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2503
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2504 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2505
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2506 public DataRow MapDictionaryToDataRow(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2507 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2508 DataRow destRow)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2509 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2510 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2511 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2512 CreateDictionaryMapper(sourceDictionary), sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2513 CreateDataRowMapper (destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2514 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2515
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2516 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2517 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2518
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2519 public DataRow MapDictionaryToDataRow(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2520 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2521 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2522 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2523 if (destTable == null) throw new ArgumentNullException("destTable");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2524
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2525 DataRow destRow = destTable.NewRow();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2526
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2527 destTable.Rows.Add(destRow);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2528
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2529 MapInternal(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2530 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2531 CreateDictionaryMapper(sourceDictionary), sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2532 CreateDataRowMapper (destRow, DataRowVersion.Default), destRow,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2533 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2534
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2535 return destRow;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2536 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2537
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2538 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2539
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2540 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2541
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2542 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2543
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2544 #region List
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2545
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2546 #region MapListToList
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2547
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2548 public IList MapListToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2549 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2550 IList destList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2551 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2552 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2553 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2554 if (sourceList == null) throw new ArgumentNullException("sourceList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2555
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2556 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2557 CreateEnumeratorMapper(sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2558 CreateObjectListMapper(destList, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2559 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2560
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2561 return destList;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2562 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2563
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2564 public IList MapListToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2565 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2566 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2567 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2568 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2569 if (sourceList == null) throw new ArgumentNullException("sourceList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2570
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2571 var destList = new List<object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2572
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2573 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2574 CreateEnumeratorMapper(sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2575 CreateObjectListMapper(destList, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2576 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2577
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2578 return destList;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2579 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2580
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2581 public List<T> MapListToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2582 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2583 List<T> destList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2584 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2585 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2586 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2587 CreateEnumeratorMapper(sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2588 CreateObjectListMapper(destList, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2589 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2590
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2591 return destList;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2592 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2593
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2594 public List<T> MapListToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2595 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2596 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2597 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2598 List<T> destList = new List<T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2599
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2600 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2601 CreateEnumeratorMapper(sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2602 CreateObjectListMapper(destList, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2603 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2604
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2605 return destList;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2606 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2607
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2608 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2609
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2610 #region MapListToDataTable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2611
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2612 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2613
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2614 public DataTable MapListToDataTable(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2615 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2616 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2617 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2618 if (sourceList == null) throw new ArgumentNullException("sourceList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2619
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2620 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2621 CreateEnumeratorMapper(sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2622 CreateDataTableMapper (destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2623 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2624
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2625 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2626 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2627
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2628 [SuppressMessage("Microsoft.Globalization", "CA1306:SetLocaleForDataTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2629 public DataTable MapListToDataTable(ICollection sourceList)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2630 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2631 if (sourceList == null) throw new ArgumentNullException("sourceList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2632
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2633 DataTable destTable = new DataTable();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2634
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2635 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2636 CreateEnumeratorMapper(sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2637 CreateDataTableMapper (destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2638 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2639
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2640 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2641 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2642
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2643 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2644
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2645 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2646
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2647 #region MapListToDictionary
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2648
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2649 public IDictionary MapListToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2650 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2651 IDictionary destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2652 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2653 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2654 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2655 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2656 if (sourceList == null) throw new ArgumentNullException("sourceList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2657
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2658 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2659 CreateEnumeratorMapper (sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2660 CreateDictionaryListMapper(destDictionary, keyFieldNameOrIndex, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2661 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2662
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2663 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2664 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2665
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2666 public IDictionary MapListToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2667 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2668 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2669 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2670 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2671 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2672 if (sourceList == null) throw new ArgumentNullException("sourceList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2673
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2674 IDictionary destDictionary = new Dictionary<object,object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2675
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2676 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2677 CreateEnumeratorMapper (sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2678 CreateDictionaryListMapper(destDictionary, keyFieldNameOrIndex, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2679 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2680
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2681 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2682 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2683
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2684 public IDictionary<TK,T> MapListToDictionary<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2685 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2686 IDictionary<TK,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2687 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2688 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2689 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2690 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2691 CreateEnumeratorMapper (sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2692 CreateDictionaryListMapper<TK,T>(destDictionary, keyFieldNameOrIndex, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2693 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2694
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2695 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2696 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2697
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2698 public Dictionary<TK,T> MapListToDictionary<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2699 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2700 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2701 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2702 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2703 Dictionary<TK,T> destDictionary = new Dictionary<TK,T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2704
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2705 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2706 CreateEnumeratorMapper (sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2707 CreateDictionaryListMapper<TK,T>(destDictionary, keyFieldNameOrIndex, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2708 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2709
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2710 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2711 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2712
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2713 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2714
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2715 #region MapListToDictionaryIndex
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2716
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2717 public IDictionary MapListToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2718 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2719 IDictionary destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2720 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2721 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2722 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2723 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2724 if (sourceList == null) throw new ArgumentNullException("sourceList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2725
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2726 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2727 CreateEnumeratorMapper (sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2728 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2729 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2730
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2731 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2732 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2733
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2734 public IDictionary MapListToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2735 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2736 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2737 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2738 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2739 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2740 if (sourceList == null) throw new ArgumentNullException("sourceList");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2741
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2742 IDictionary destDictionary = new Dictionary<object,object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2743
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2744 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2745 CreateEnumeratorMapper (sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2746 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2747 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2748
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2749 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2750 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2751
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2752 public IDictionary<CompoundValue,T> MapListToDictionary<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2753 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2754 IDictionary<CompoundValue,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2755 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2756 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2757 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2758 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2759 CreateEnumeratorMapper (sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2760 CreateDictionaryListMapper<T>(destDictionary, index, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2761 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2762
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2763 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2764 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2765
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2766 public Dictionary<CompoundValue,T> MapListToDictionary<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2767 ICollection sourceList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2768 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2769 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2770 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2771 Dictionary<CompoundValue, T> destDictionary = new Dictionary<CompoundValue,T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2772
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2773 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2774 CreateEnumeratorMapper (sourceList.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2775 CreateDictionaryListMapper<T>(destDictionary, index, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2776 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2777
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2778 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2779 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2780
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2781 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2782
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2783 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2784
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2785 #region Table
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2786
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2787 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2788
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2789
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2790 #region MapDataTableToDataTable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2791
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2792 public DataTable MapDataTableToDataTable(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2793 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2794 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2795 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2796 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2797 CreateDataTableMapper(sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2798 CreateDataTableMapper(destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2799 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2800
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2801 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2802 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2803
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2804 public DataTable MapDataTableToDataTable(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2805 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2806 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2807 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2808 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2809 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2810 CreateDataTableMapper(sourceTable, version),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2811 CreateDataTableMapper(destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2812 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2813
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2814 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2815 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2816
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2817 public DataTable MapDataTableToDataTable(DataTable sourceTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2818 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2819 if (sourceTable == null) throw new ArgumentNullException("sourceTable");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2820
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2821 DataTable destTable = sourceTable.Clone();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2822
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2823 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2824 CreateDataTableMapper(sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2825 CreateDataTableMapper(destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2826 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2827
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2828 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2829 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2830
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2831 public DataTable MapDataTableToDataTable(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2832 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2833 DataRowVersion version)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2834 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2835 if (sourceTable == null) throw new ArgumentNullException("sourceTable");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2836
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2837 DataTable destTable = sourceTable.Clone();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2838
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2839 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2840 CreateDataTableMapper(sourceTable, version),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2841 CreateDataTableMapper(destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2842 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2843
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2844 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2845 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2846
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2847 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2848
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2849 #region MapDataTableToList
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2850
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2851 public IList MapDataTableToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2852 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2853 IList list,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2854 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2855 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2856 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2857 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2858 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2859 CreateObjectListMapper(list, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2860 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2861
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2862 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2863 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2864
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2865 public IList MapDataTableToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2866 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2867 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2868 IList list,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2869 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2870 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2871 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2872 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2873 CreateDataTableMapper (sourceTable, version),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2874 CreateObjectListMapper(list, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2875 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2876
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2877 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2878 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2879
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2880 public ArrayList MapDataTableToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2881 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2882 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2883 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2884 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2885 ArrayList list = new ArrayList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2886
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2887 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2888 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2889 CreateObjectListMapper(list, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2890 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2891
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2892 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2893 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2894
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2895 public ArrayList MapDataTableToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2896 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2897 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2898 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2899 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2900 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2901 ArrayList list = new ArrayList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2902
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2903 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2904 CreateDataTableMapper (sourceTable, version),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2905 CreateObjectListMapper(list, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2906 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2907
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2908 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2909 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2910
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2911 public List<T> MapDataTableToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2912 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2913 List<T> list,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2914 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2915 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2916 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2917 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2918 CreateObjectListMapper(list, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2919 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2920
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2921 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2922 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2923
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2924 public List<T> MapDataTableToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2925 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2926 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2927 List<T> list,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2928 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2929 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2930 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2931 CreateDataTableMapper (sourceTable, version),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2932 CreateObjectListMapper(list, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2933 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2934
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2935 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2936 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2937
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2938 public List<T> MapDataTableToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2939 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2940 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2941 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2942 List<T> list = new List<T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2943
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2944 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2945 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2946 CreateObjectListMapper(list, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2947 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2948
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2949 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2950 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2951
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2952 public List<T> MapDataTableToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2953 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2954 DataRowVersion version,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2955 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2956 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2957 List<T> list = new List<T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2958
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2959 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2960 CreateDataTableMapper (sourceTable, version),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2961 CreateObjectListMapper(list, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2962 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2963
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2964 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2965 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2966
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2967 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2968
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2969 #region MapDataTableToDictionary
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2970
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2971 public IDictionary MapDataTableToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2972 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2973 IDictionary destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2974 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2975 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2976 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2977 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2978 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2979 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2980 CreateDictionaryListMapper(destDictionary, keyFieldNameOrIndex, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2981 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2982
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2983 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2984 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2985
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2986 public Hashtable MapDataTableToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2987 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2988 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2989 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2990 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2991 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2992 Hashtable destDictionary = new Hashtable();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2993
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2994 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2995 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2996 CreateDictionaryListMapper(destDictionary, keyFieldNameOrIndex, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2997 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2998
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2999 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3000 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3001
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3002 public IDictionary<TK,T> MapDataTableToDictionary<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3003 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3004 IDictionary<TK,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3005 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3006 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3007 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3008 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3009 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3010 CreateDictionaryListMapper<TK,T>(destDictionary, keyFieldNameOrIndex, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3011 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3012
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3013 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3014 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3015
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3016 public Dictionary<TK,T> MapDataTableToDictionary<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3017 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3018 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3019 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3020 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3021 Dictionary<TK,T> destDictionary = new Dictionary<TK,T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3022
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3023 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3024 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3025 CreateDictionaryListMapper<TK,T>(destDictionary, keyFieldNameOrIndex, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3026 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3027
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3028 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3029 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3030
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3031 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3032
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3033 #region MapDataTableToDictionary (Index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3034
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3035 public IDictionary MapDataTableToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3036 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3037 IDictionary destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3038 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3039 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3040 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3041 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3042 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3043 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3044 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3045 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3046
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3047 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3048 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3049
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3050 public Hashtable MapDataTableToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3051 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3052 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3053 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3054 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3055 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3056 Hashtable destDictionary = new Hashtable();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3057
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3058 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3059 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3060 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3061 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3062
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3063 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3064 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3065
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3066 public IDictionary<CompoundValue,T> MapDataTableToDictionary<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3067 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3068 IDictionary<CompoundValue,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3069 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3070 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3071 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3072 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3073 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3074 CreateDictionaryListMapper<T>(destDictionary, index, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3075 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3076
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3077 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3078 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3079
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3080 public Dictionary<CompoundValue,T> MapDataTableToDictionary<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3081 DataTable sourceTable,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3082 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3083 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3084 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3085 Dictionary<CompoundValue,T> destDictionary = new Dictionary<CompoundValue,T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3086
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3087 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3088 CreateDataTableMapper (sourceTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3089 CreateDictionaryListMapper<T>(destDictionary, index, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3090 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3091
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3092 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3093 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3094
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3095 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3096
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3097 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3098
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3099 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3100
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3101 #region DataReader
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3102
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3103 #region MapDataReaderToList
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3105 public virtual IList MapDataReaderToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3106 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3107 IList list,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3108 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3109 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3110 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3111 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3112 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3113 CreateObjectListMapper (list, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3114 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3116 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3117 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3118
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3119 public IList MapDataReaderToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3120 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3121 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3122 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3124 IList list = new List<object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3126 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3127 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3128 CreateObjectListMapper (list, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3129 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3130
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3131 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3132 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3133
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3134 //NOTE changed to virtual
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3135 public virtual IList<T> MapDataReaderToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3136 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3137 IList<T> list,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3138 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3140 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3141 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3142 CreateObjectListMapper ((IList)list, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3143 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3144
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3145 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3146 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3147
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3148 public List<T> MapDataReaderToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3149 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3150 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3151 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3152 List<T> list = new List<T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3153
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3154 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3155 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3156 CreateObjectListMapper (list, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3157 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3159 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3160 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3161
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3162 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3163
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3164 #region MapDataReaderToScalarList
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3166 public IList MapDataReaderToScalarList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3167 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3168 NameOrIndexParameter nameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3169 IList list,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3170 Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3171 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3172 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3173 CreateDataReaderListMapper(reader, nameOrIndex),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3174 CreateScalarDestinationListMapper(list, type),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3175 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3176
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3177 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3178 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3179
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3180 public IList MapDataReaderToScalarList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3181 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3182 NameOrIndexParameter nameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3183 Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3184 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3185 IList list = new List<object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3187 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3188 CreateDataReaderListMapper(reader, nameOrIndex),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3189 CreateScalarDestinationListMapper(list, type),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3190 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3191
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3192 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3193 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3194
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3195 public IList<T> MapDataReaderToScalarList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3196 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3197 NameOrIndexParameter nameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3198 IList<T> list)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3199 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3200 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3201 CreateDataReaderListMapper(reader, nameOrIndex),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3202 CreateScalarDestinationListMapper(list),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3203 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3204
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3205 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3206 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3207
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3208 public List<T> MapDataReaderToScalarList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3209 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3210 NameOrIndexParameter nameOrIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3211 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3212 List<T> list = new List<T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3213
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3214 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3215 CreateDataReaderListMapper(reader, nameOrIndex),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3216 CreateScalarDestinationListMapper(list),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3217 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3218
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3219 return list;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3220 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3221
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3222 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3223
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3224 #region MapDataReaderToDataTable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3225
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3226 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3227
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3228 public DataTable MapDataReaderToDataTable(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3229 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3230 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3231 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3232 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3233 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3234 CreateDataTableMapper (destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3235 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3236
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3237 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3238 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3239
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3240 [SuppressMessage("Microsoft.Globalization", "CA1306:SetLocaleForDataTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3241 public DataTable MapDataReaderToDataTable(IDataReader reader)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3242 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3243 DataTable destTable = new DataTable();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3244
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3245 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3246 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3247 CreateDataTableMapper (destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3248 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3249
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3250 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3251 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3252
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3253 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3254
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3255 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3256
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3257 #region MapDataReaderToDictionary
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3259 public IDictionary MapDataReaderToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3260 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3261 IDictionary destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3262 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3263 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3264 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3265 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3266 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3267 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3268 CreateDictionaryListMapper(destDictionary, keyFieldNameOrIndex, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3269 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3270
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3271 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3272 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3273
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3274 public IDictionary MapDataReaderToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3275 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3276 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3277 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3278 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3279 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3280 IDictionary dest = new Dictionary<object,object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3281
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3282 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3283 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3284 CreateDictionaryListMapper(dest, keyFieldNameOrIndex, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3285 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3286
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3287 return dest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3288 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3289
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3290 public IDictionary<TK,T> MapDataReaderToDictionary<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3291 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3292 IDictionary<TK,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3293 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3294 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3295 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3296 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3297 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3298 CreateDataReaderListMapper (reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3299 CreateDictionaryListMapper<TK,T>(destDictionary, keyFieldNameOrIndex, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3300 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3301
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3302 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3303 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3304
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3305 public IDictionary<TK,T> MapDataReaderToDictionary<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3306 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3307 IDictionary<TK,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3308 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3309 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3310 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3311 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3312 CreateDataReaderListMapper (reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3313 CreateDictionaryListMapper<TK,T>(destDictionary, keyFieldNameOrIndex, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3314 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3315
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3316 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3317 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3318
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3319 public Dictionary<TK,T> MapDataReaderToDictionary<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3320 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3321 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3322 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3323 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3324 Dictionary<TK,T> dest = new Dictionary<TK,T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3325
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3326 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3327 CreateDataReaderListMapper (reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3328 CreateDictionaryListMapper<TK,T>(dest, keyFieldNameOrIndex, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3329 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3330
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3331 return dest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3332 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3333
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3334 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3335
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3336 #region MapDataReaderToDictionary (Index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3337
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3338 public IDictionary MapDataReaderToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3339 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3340 IDictionary destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3341 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3342 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3343 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3344 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3345 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3346 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3347 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3348 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3349
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3350 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3351 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3352
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3353 public IDictionary MapDataReaderToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3354 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3355 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3356 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3357 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3358 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3359 IDictionary destDictionary = new Dictionary<object,object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3360
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3361 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3362 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3363 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3364 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3365
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3366 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3367 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3368
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3369 public IDictionary<CompoundValue,T> MapDataReaderToDictionary<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3370 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3371 IDictionary<CompoundValue,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3372 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3373 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3374 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3375 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3376 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3377 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3378 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3379 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3380
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3381 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3382 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3383
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3384 public IDictionary<CompoundValue,T> MapDataReaderToDictionary<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3385 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3386 IDictionary<CompoundValue,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3387 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3388 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3389 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3390 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3391 CreateDataReaderListMapper(reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3392 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3393 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3394
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3395 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3396 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3397
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3398 public Dictionary<CompoundValue,T> MapDataReaderToDictionary<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3399 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3400 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3401 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3402 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3403 Dictionary<CompoundValue,T> destDictionary = new Dictionary<CompoundValue,T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3404
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3405 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3406 CreateDataReaderListMapper (reader),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3407 CreateDictionaryListMapper<T>(destDictionary, index, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3408 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3409
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3410 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3411 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3412
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3413 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3414
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3415 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3416
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3417 #region Dictionary
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3418
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3419 #region MapDictionaryToList
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3420
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3421 public IList MapDictionaryToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3422 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3423 IList destList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3424 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3425 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3426 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3427 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3428
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3429 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3430 CreateEnumeratorMapper(sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3431 CreateObjectListMapper(destList, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3432 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3433
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3434 return destList;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3435 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3436
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3437 public IList MapDictionaryToList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3438 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3439 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3440 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3441 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3442 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3443
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3444 IList destList = new List<object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3445
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3446 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3447 CreateEnumeratorMapper(sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3448 CreateObjectListMapper(destList, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3449 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3450
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3451 return destList;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3452 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3453
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3454 public List<T> MapDictionaryToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3455 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3456 List<T> destList,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3457 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3458 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3459 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3460
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3461 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3462 CreateEnumeratorMapper(sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3463 CreateObjectListMapper(destList, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3464 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3465
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3466 return destList;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3467 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3468
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3469 public List<T> MapDictionaryToList<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3470 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3471 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3472 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3473 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3474
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3475 List<T> destList = new List<T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3476
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3477 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3478 CreateEnumeratorMapper(sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3479 CreateObjectListMapper(destList, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3480 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3481
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3482 return destList;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3483 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3484
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3485 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3486
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3487 #region MapDictionaryToDataTable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3488
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3489 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3490
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3491 public DataTable MapDictionaryToDataTable(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3492 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3493 DataTable destTable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3494 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3495 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3496
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3497 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3498 CreateEnumeratorMapper(sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3499 CreateDataTableMapper (destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3500 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3501
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3502 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3503 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3504
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3505 [SuppressMessage("Microsoft.Globalization", "CA1306:SetLocaleForDataTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3506 public DataTable MapDictionaryToDataTable(IDictionary sourceDictionary)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3507 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3508 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3509
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3510 DataTable destTable = new DataTable();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3511
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3512 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3513 CreateEnumeratorMapper(sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3514 CreateDataTableMapper (destTable, DataRowVersion.Default),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3515 null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3516
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3517 return destTable;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3518 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3519
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3520 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3521
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3522 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3523
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3524 #region MapDictionaryToDictionary
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3525
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3526 public IDictionary MapDictionaryToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3527 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3528 IDictionary destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3529 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3530 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3531 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3532 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3533 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3534
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3535 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3536 CreateEnumeratorMapper (sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3537 CreateDictionaryListMapper(destDictionary, keyFieldNameOrIndex, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3538 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3539
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3540 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3541 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3542
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3543 public IDictionary MapDictionaryToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3544 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3545 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3546 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3547 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3548 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3549 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3550
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3551 IDictionary dest = new Dictionary<object,object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3552
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3553 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3554 CreateEnumeratorMapper (sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3555 CreateDictionaryListMapper(dest, keyFieldNameOrIndex, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3556 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3557
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3558 return dest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3559 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3560
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3561 public IDictionary<TK,T> MapDictionaryToDictionary<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3562 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3563 IDictionary<TK,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3564 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3565 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3566 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3567 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3568
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3569 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3570 CreateEnumeratorMapper (sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3571 CreateDictionaryListMapper<TK,T>(destDictionary, keyFieldNameOrIndex, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3572 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3573
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3574 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3575 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3576
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3577 public Dictionary<TK,T> MapDictionaryToDictionary<TK,T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3578 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3579 NameOrIndexParameter keyFieldNameOrIndex,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3580 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3581 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3582 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3583
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3584 Dictionary<TK,T> dest = new Dictionary<TK,T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3585
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3586 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3587 CreateEnumeratorMapper (sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3588 CreateDictionaryListMapper<TK,T>(dest, keyFieldNameOrIndex, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3589 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3590
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3591 return dest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3592 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3593
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3594 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3595
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3596 #region MapDictionaryToDictionary (Index)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3597
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3598 public IDictionary MapDictionaryToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3599 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3600 IDictionary destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3601 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3602 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3603 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3604 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3605 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3606
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3607 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3608 CreateEnumeratorMapper (sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3609 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3610 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3611
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3612 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3613 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3614
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3615 public IDictionary MapDictionaryToDictionary(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3616 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3617 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3618 Type destObjectType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3619 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3620 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3621 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3622
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3623 IDictionary destDictionary = new Dictionary<object,object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3624
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3625 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3626 CreateEnumeratorMapper (sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3627 CreateDictionaryListMapper(destDictionary, index, GetObjectMapper(destObjectType)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3628 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3629
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3630 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3631 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3632
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3633 public IDictionary<CompoundValue,T> MapDictionaryToDictionary<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3634 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3635 IDictionary<CompoundValue,T> destDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3636 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3637 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3638 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3639 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3640
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3641 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3642 CreateEnumeratorMapper (sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3643 CreateDictionaryListMapper<T>(destDictionary, index, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3644 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3645
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3646 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3647 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3648
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3649 public Dictionary<CompoundValue,T> MapDictionaryToDictionary<T>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3650 IDictionary sourceDictionary,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3651 MapIndex index,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3652 params object[] parameters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3653 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3654 if (sourceDictionary == null) throw new ArgumentNullException("sourceDictionary");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3655
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3656 Dictionary<CompoundValue,T> destDictionary = new Dictionary<CompoundValue,T>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3657
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3658 MapSourceListToDestinationList(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3659 CreateEnumeratorMapper (sourceDictionary.Values.GetEnumerator()),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3660 CreateDictionaryListMapper<T>(destDictionary, index, GetObjectMapper(typeof(T))),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3661 parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3662
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3663 return destDictionary;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3664 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3665
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3666 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3667
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3668 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3669
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3670 #region MapToResultSet
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3671
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3672 public void MapResultSets(MapResultSet[] resultSets)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3673 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3674 var initTable = new Dictionary<object,object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3675 var context = new InitContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3676
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3677 object lastContainer = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3678
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3679 context.MappingSchema = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3680
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3681 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3682 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3683 PrepareRelarions(resultSets);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3684
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3685 // Map relations.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3686 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3687 foreach (MapResultSet rs in resultSets)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3688 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3689 if (rs.Relations == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3690 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3691
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3692 ObjectMapper masterMapper = GetObjectMapper(rs.ObjectType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3693
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3694 foreach (MapRelation r in rs.Relations)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3695 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3696 MemberAccessor ma = masterMapper.TypeAccessor[r.ContainerName];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3697
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3698 if (ma == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3699 throw new MappingException(string.Format(Resources.MapIndex_BadField,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3700 masterMapper.TypeAccessor.OriginalType.Name, r.ContainerName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3701
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3702 // Map.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3703 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3704 var slave = r.SlaveResultSet;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3705 var slaveMapper = GetObjectMapper(r.SlaveResultSet.ObjectType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3706 var indexedLists = rs.GetIndex(this, r.MasterIndex);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3707
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3708 foreach (object o in slave.List)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3709 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3710 object key = r.SlaveIndex.GetValueOrIndex(slaveMapper, o);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3711
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3712 if (IsNull(key))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3713 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3714
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3715 IList masterList;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3716
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3717 if (!indexedLists.TryGetValue(key, out masterList))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3718 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3719
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3720 foreach (object master in masterList)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3721 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3722 ISupportMapping msm = master as ISupportMapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3723
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3724 if (msm != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3725 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3726 if (initTable.ContainsKey(master) == false)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3727 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3728 msm.BeginMapping(context);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3729 initTable.Add(master, msm);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3730 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3731 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3732
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3733 object container = ma.GetValue(master);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3734
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3735 if (container is IList)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3736 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3737 if (lastContainer != container)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3738 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3739 lastContainer = container;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3740
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3741 ISupportMapping sm = container as ISupportMapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3742
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3743 if (sm != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3744 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3745 if (initTable.ContainsKey(container) == false)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3746 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3747 sm.BeginMapping(context);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3748 initTable[container] = sm;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3749 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3750 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3751 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3752
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3753 ((IList)container).Add(o);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3754 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3755 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3756 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3757 ma.SetValue(master, o);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3758 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3759 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3760 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3761 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3762 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3763 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3764 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3765 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3766 foreach (ISupportMapping si in initTable.Values)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3767 si.EndMapping(context);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3768 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3769 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3770
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3771 public void MapDataReaderToResultSet(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3772 IDataReader reader,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3773 MapResultSet[] resultSets)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3774 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3775 if (reader == null) throw new ArgumentNullException("reader");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3776
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3777 foreach (MapResultSet rs in resultSets)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3778 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3779 MapDataReaderToList(reader, rs.List, rs.ObjectType, rs.Parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3780
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3781 if (reader.NextResult() == false)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3782 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3783 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3784
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3785 MapResultSets(resultSets);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3786 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3787
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3788 #if !SILVERLIGHT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3789
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3790 public void MapDataSetToResultSet(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3791 DataSet dataSet,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3792 MapResultSet[] resultSets)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3793 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3794 for (int i = 0; i < resultSets.Length && i < dataSet.Tables.Count; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3795 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3796 MapResultSet rs = resultSets[i];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3797
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3798 MapDataTableToList(dataSet.Tables[i], rs.List, rs.ObjectType, rs.Parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3799 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3800
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3801 MapResultSets(resultSets);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3802 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3803
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3804 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3805
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3806 public MapResultSet[] Clone(MapResultSet[] resultSets)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3807 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3808 MapResultSet[] output = new MapResultSet[resultSets.Length];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3809
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3810 for (int i = 0; i < resultSets.Length; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3811 output[i] = new MapResultSet(resultSets[i]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3812
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3813 return output;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3814 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3815
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3816 private static int GetResultCount(MapNextResult[] nextResults)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3817 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3818 int n = nextResults.Length;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3819
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3820 foreach (MapNextResult nr in nextResults)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3821 n += GetResultCount(nr.NextResults);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3822
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3823 return n;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3824 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3825
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3826 private static int GetResultSets(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3827 int current,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3828 MapResultSet[] output,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3829 MapResultSet master,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3830 MapNextResult[] nextResults)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3831 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3832 foreach (MapNextResult nr in nextResults)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3833 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3834 output[current] = new MapResultSet(nr.ObjectType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3835
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3836 master.AddRelation(output[current], nr.SlaveIndex, nr.MasterIndex, nr.ContainerName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3837
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3838 current += GetResultSets(current + 1, output, output[current], nr.NextResults);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3839 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3840
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3841 return current;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3842 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3843
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3844 public MapResultSet[] ConvertToResultSet(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3845 Type masterType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3846 params MapNextResult[] nextResults)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3847 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3848 MapResultSet[] output = new MapResultSet[1 + GetResultCount(nextResults)];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3849
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3850 output[0] = new MapResultSet(masterType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3851
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3852 GetResultSets(1, output, output[0], nextResults);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3853
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3854 return output;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3855 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3856
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3857 private void PrepareRelarions(params MapResultSet[] sets)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3858 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3859 foreach (MapResultSet masterSet in sets)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3860 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3861 if (masterSet.Relations != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3862 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3863
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3864 foreach (MapResultSet slaveSet in sets)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3865 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3866 bool isSet;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3867
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3868 List<MapRelationBase> relations
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3869 = MetadataProvider.GetRelations(this, Extensions, masterSet.ObjectType, slaveSet.ObjectType, out isSet);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3870
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3871 if (!isSet)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3872 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3873
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3874 foreach (MapRelationBase relation in relations)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3875 masterSet.AddRelation(slaveSet, relation);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3876 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3877 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3878 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3879
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3880 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3881
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3882 #region GetObjectMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3883
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3884 public Func<TSource,TDest> GetObjectMapper<TSource,TDest>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3885 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3886 return new ExpressionMapper<TSource,TDest>(this)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3887 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3888 IncludeComplexMapping = Common.Configuration.ExpressionMapper.IncludeComplexMapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3889 }.GetMapper();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3890 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3891
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3892 public Func<TSource,TDest> GetObjectMapper<TSource,TDest>(bool deepCopy)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3893 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3894 return new ExpressionMapper<TSource,TDest>(this)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3895 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3896 DeepCopy = deepCopy,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3897 IncludeComplexMapping = Common.Configuration.ExpressionMapper.IncludeComplexMapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3898 }.GetMapper();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3899 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3900
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3901 public Func<TSource,TDest> GetObjectMapper<TSource,TDest>(bool deepCopy, bool includeComplexMapping)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3902 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3903 return new ExpressionMapper<TSource,TDest>(this)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3904 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3905 DeepCopy = deepCopy,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3906 IncludeComplexMapping = includeComplexMapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3907 }.GetMapper();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3908 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3909
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3910 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3911
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3912 #region ConvertParameterValue
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3913
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3914 public virtual object ConvertParameterValue(object value, Type systemType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3915 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3916 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3917 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3918
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3919 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3920 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3921 }