comparison Source/Common/Convert.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:f990fcb411a9
1 using System;
2 using System.Data.Linq;
3 using System.Data.SqlTypes;
4 using System.IO;
5 using System.Threading;
6 using System.Xml;
7 #if !SILVERLIGHT
8 using System.Xml.Linq;
9 #endif
10
11 namespace BLToolkit.Common
12 {
13 using Properties;
14
15 /// <summary>Converts a base data type to another base data type.</summary>
16 public static partial class Convert
17 {
18 #region Boolean
19
20 /// <summary>Converts the value from <c>Char</c> to an equivalent <c>Boolean</c> value.</summary>
21 public static Boolean ToBoolean(Char p)
22 {
23 switch (p)
24 {
25 case '\x0' : // Allow int <=> Char <=> Boolean
26 case '0' :
27 case 'n' :
28 case 'N' :
29 case 'f' :
30 case 'F' : return false;
31
32 case '\x1' : // Allow int <=> Char <=> Boolean
33 case '1' :
34 case 'y' :
35 case 'Y' :
36 case 't' :
37 case 'T' : return true;
38 }
39
40 throw CreateInvalidCastException(typeof(Char), typeof(Boolean));
41 }
42
43 #endregion
44
45 #region Byte[]
46
47 /// <summary>Converts the value from <c>Decimal</c> to an equivalent <c>Byte[]</c> value.</summary>
48 public static Byte[] ToByteArray(Decimal p)
49 {
50 var bits = Decimal.GetBits(p);
51 var bytes = new Byte[Buffer.ByteLength(bits)];
52
53 Buffer.BlockCopy(bits, 0, bytes, 0, bytes.Length);
54 return bytes;
55 }
56
57 /// <summary>Converts the value from <c>Stream</c> to an equivalent <c>Byte[]</c> value.</summary>
58 public static Byte[] ToByteArray(Stream p)
59 {
60 if (p == null || p == Stream.Null) return null;
61 if (p is MemoryStream) return ((MemoryStream)p).ToArray();
62
63 var position = p.Seek(0, SeekOrigin.Begin);
64 var bytes = new Byte[p.Length];
65
66 p.Read(bytes, 0, bytes.Length);
67 p.Position = position;
68
69 return bytes;
70 }
71
72 /// <summary>Converts the value from <c>Char[]</c> to an equivalent <c>Byte[]</c> value.</summary>
73 public static Byte[] ToByteArray(Char[] p)
74 {
75 var bytes = new Byte[Buffer.ByteLength(p)];
76
77 Buffer.BlockCopy(p, 0, bytes, 0, bytes.Length);
78 return bytes;
79 }
80
81 #endregion
82
83 #region Decimal
84
85 /// <summary>Converts the value from <c>Byte[]</c> to an equivalent <c>Decimal</c> value.</summary>
86 public static Decimal ToDecimal(Byte[] p)
87 {
88 if (p == null || p.Length == 0) return 0.0m;
89
90 var bits = new int[p.Length / sizeof(int)];
91
92 Buffer.BlockCopy(p, 0, bits, 0, p.Length);
93 return new Decimal(bits);
94 }
95
96 public static Decimal ToDecimal(Binary p)
97 {
98 if (p == null || p.Length == 0) return 0.0m;
99
100 var bits = new int[p.Length / sizeof(int)];
101
102 Buffer.BlockCopy(p.ToArray(), 0, bits, 0, p.Length);
103 return new Decimal(bits);
104 }
105
106 #endregion
107
108 #region SqlTypes
109
110 #if !SILVERLIGHT
111
112 #region SqlChars
113
114 // Scalar Types.
115 //
116 /// <summary>Converts the value from <c>String</c> to an equivalent <c>SqlChars</c> value.</summary>
117 public static SqlChars ToSqlChars(String p) { return p == null? SqlChars.Null: new SqlChars(p.ToCharArray()); }
118 /// <summary>Converts the value from <c>Char[]</c> to an equivalent <c>SqlChars</c> value.</summary>
119 public static SqlChars ToSqlChars(Char[] p) { return p == null? SqlChars.Null: new SqlChars(p); }
120 /// <summary>Converts the value from <c>Byte[]</c> to an equivalent <c>SqlChars</c> value.</summary>
121 public static SqlChars ToSqlChars(Byte[] p) { return p == null? SqlChars.Null: new SqlChars(ToCharArray(p)); }
122 public static SqlChars ToSqlChars(Binary p) { return p == null? SqlChars.Null: new SqlChars(ToCharArray(p.ToArray())); }
123
124 /// <summary>Converts the value from <c>SByte</c> to an equivalent <c>SqlChars</c> value.</summary>
125 [CLSCompliant(false)]
126 public static SqlChars ToSqlChars(SByte p) { return new SqlChars(ToString(p).ToCharArray()); }
127 /// <summary>Converts the value from <c>Int16</c> to an equivalent <c>SqlChars</c> value.</summary>
128 public static SqlChars ToSqlChars(Int16 p) { return new SqlChars(ToString(p).ToCharArray()); }
129 /// <summary>Converts the value from <c>Int32</c> to an equivalent <c>SqlChars</c> value.</summary>
130 public static SqlChars ToSqlChars(Int32 p) { return new SqlChars(ToString(p).ToCharArray()); }
131 /// <summary>Converts the value from <c>Int64</c> to an equivalent <c>SqlChars</c> value.</summary>
132 public static SqlChars ToSqlChars(Int64 p) { return new SqlChars(ToString(p).ToCharArray()); }
133
134 /// <summary>Converts the value from <c>Byte</c> to an equivalent <c>SqlChars</c> value.</summary>
135 public static SqlChars ToSqlChars(Byte p) { return new SqlChars(ToString(p).ToCharArray()); }
136 /// <summary>Converts the value from <c>UInt16</c> to an equivalent <c>SqlChars</c> value.</summary>
137 [CLSCompliant(false)]
138 public static SqlChars ToSqlChars(UInt16 p) { return new SqlChars(ToString(p).ToCharArray()); }
139 /// <summary>Converts the value from <c>UInt32</c> to an equivalent <c>SqlChars</c> value.</summary>
140 [CLSCompliant(false)]
141 public static SqlChars ToSqlChars(UInt32 p) { return new SqlChars(ToString(p).ToCharArray()); }
142 /// <summary>Converts the value from <c>UInt64</c> to an equivalent <c>SqlChars</c> value.</summary>
143 [CLSCompliant(false)]
144 public static SqlChars ToSqlChars(UInt64 p) { return new SqlChars(ToString(p).ToCharArray()); }
145
146 /// <summary>Converts the value from <c>Single</c> to an equivalent <c>SqlChars</c> value.</summary>
147 public static SqlChars ToSqlChars(Single p) { return new SqlChars(ToString(p).ToCharArray()); }
148 /// <summary>Converts the value from <c>Double</c> to an equivalent <c>SqlChars</c> value.</summary>
149 public static SqlChars ToSqlChars(Double p) { return new SqlChars(ToString(p).ToCharArray()); }
150
151 /// <summary>Converts the value from <c>Boolean</c> to an equivalent <c>SqlChars</c> value.</summary>
152 public static SqlChars ToSqlChars(Boolean p) { return new SqlChars(ToString(p).ToCharArray()); }
153 /// <summary>Converts the value from <c>Decimal</c> to an equivalent <c>SqlChars</c> value.</summary>
154 public static SqlChars ToSqlChars(Decimal p) { return new SqlChars(ToString(p).ToCharArray()); }
155 /// <summary>Converts the value from <c>Char</c> to an equivalent <c>SqlChars</c> value.</summary>
156 public static SqlChars ToSqlChars(Char p) { return new SqlChars(ToString(p).ToCharArray()); }
157 /// <summary>Converts the value from <c>TimeSpan</c> to an equivalent <c>SqlChars</c> value.</summary>
158 public static SqlChars ToSqlChars(TimeSpan p) { return new SqlChars(ToString(p).ToCharArray()); }
159 /// <summary>Converts the value from <c>DateTime</c> to an equivalent <c>SqlChars</c> value.</summary>
160 public static SqlChars ToSqlChars(DateTime p) { return new SqlChars(ToString(p).ToCharArray()); }
161 /// <summary>Converts the value from <c>DateTimeOffset</c> to an equivalent <c>SqlChars</c> value.</summary>
162 public static SqlChars ToSqlChars(DateTimeOffset p) { return new SqlChars(ToString(p).ToCharArray()); }
163 /// <summary>Converts the value from <c>Guid</c> to an equivalent <c>SqlChars</c> value.</summary>
164 public static SqlChars ToSqlChars(Guid p) { return new SqlChars(ToString(p).ToCharArray()); }
165
166 // Nullable Types.
167 //
168 /// <summary>Converts the value from <c>SByte?</c> to an equivalent <c>SqlChars</c> value.</summary>
169 [CLSCompliant(false)]
170 public static SqlChars ToSqlChars(SByte? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
171 /// <summary>Converts the value from <c>Int16?</c> to an equivalent <c>SqlChars</c> value.</summary>
172 public static SqlChars ToSqlChars(Int16? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
173 /// <summary>Converts the value from <c>Int32?</c> to an equivalent <c>SqlChars</c> value.</summary>
174 public static SqlChars ToSqlChars(Int32? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
175 /// <summary>Converts the value from <c>Int64?</c> to an equivalent <c>SqlChars</c> value.</summary>
176 public static SqlChars ToSqlChars(Int64? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
177
178 /// <summary>Converts the value from <c>Byte?</c> to an equivalent <c>SqlChars</c> value.</summary>
179 public static SqlChars ToSqlChars(Byte? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
180 /// <summary>Converts the value from <c>UInt16?</c> to an equivalent <c>SqlChars</c> value.</summary>
181 [CLSCompliant(false)]
182 public static SqlChars ToSqlChars(UInt16? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
183 /// <summary>Converts the value from <c>UInt32?</c> to an equivalent <c>SqlChars</c> value.</summary>
184 [CLSCompliant(false)]
185 public static SqlChars ToSqlChars(UInt32? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
186 /// <summary>Converts the value from <c>UInt64?</c> to an equivalent <c>SqlChars</c> value.</summary>
187 [CLSCompliant(false)]
188 public static SqlChars ToSqlChars(UInt64? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
189
190 /// <summary>Converts the value from <c>Single?</c> to an equivalent <c>SqlChars</c> value.</summary>
191 public static SqlChars ToSqlChars(Single? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
192 /// <summary>Converts the value from <c>Double?</c> to an equivalent <c>SqlChars</c> value.</summary>
193 public static SqlChars ToSqlChars(Double? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
194
195 /// <summary>Converts the value from <c>Boolean?</c> to an equivalent <c>SqlChars</c> value.</summary>
196 public static SqlChars ToSqlChars(Boolean? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
197 /// <summary>Converts the value from <c>Decimal?</c> to an equivalent <c>SqlChars</c> value.</summary>
198 public static SqlChars ToSqlChars(Decimal? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
199 /// <summary>Converts the value from <c>Char?</c> to an equivalent <c>SqlChars</c> value.</summary>
200 public static SqlChars ToSqlChars(Char? p) { return p.HasValue? new SqlChars(new Char[]{p.Value}) : SqlChars.Null; }
201 /// <summary>Converts the value from <c>TimeSpan?</c> to an equivalent <c>SqlChars</c> value.</summary>
202 public static SqlChars ToSqlChars(TimeSpan? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
203 /// <summary>Converts the value from <c>DateTime?</c> to an equivalent <c>SqlChars</c> value.</summary>
204 public static SqlChars ToSqlChars(DateTime? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
205 /// <summary>Converts the value from <c>DateTimeOffset?</c> to an equivalent <c>SqlChars</c> value.</summary>
206 public static SqlChars ToSqlChars(DateTimeOffset? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
207 /// <summary>Converts the value from <c>Guid?</c> to an equivalent <c>SqlChars</c> value.</summary>
208 public static SqlChars ToSqlChars(Guid? p) { return p.HasValue? new SqlChars(p.ToString().ToCharArray()): SqlChars.Null; }
209
210 // SqlTypes
211 //
212 /// <summary>Converts the value from <c>SqlString</c> to an equivalent <c>SqlChars</c> value.</summary>
213 public static SqlChars ToSqlChars(SqlString p) { return (SqlChars)p; }
214
215 /// <summary>Converts the value from <c>SqlByte</c> to an equivalent <c>SqlChars</c> value.</summary>
216 public static SqlChars ToSqlChars(SqlByte p) { return (SqlChars)p.ToSqlString(); }
217 /// <summary>Converts the value from <c>SqlInt16</c> to an equivalent <c>SqlChars</c> value.</summary>
218 public static SqlChars ToSqlChars(SqlInt16 p) { return (SqlChars)p.ToSqlString(); }
219 /// <summary>Converts the value from <c>SqlInt32</c> to an equivalent <c>SqlChars</c> value.</summary>
220 public static SqlChars ToSqlChars(SqlInt32 p) { return (SqlChars)p.ToSqlString(); }
221 /// <summary>Converts the value from <c>SqlInt64</c> to an equivalent <c>SqlChars</c> value.</summary>
222 public static SqlChars ToSqlChars(SqlInt64 p) { return (SqlChars)p.ToSqlString(); }
223
224 /// <summary>Converts the value from <c>SqlSingle</c> to an equivalent <c>SqlChars</c> value.</summary>
225 public static SqlChars ToSqlChars(SqlSingle p) { return (SqlChars)p.ToSqlString(); }
226 /// <summary>Converts the value from <c>SqlDouble</c> to an equivalent <c>SqlChars</c> value.</summary>
227 public static SqlChars ToSqlChars(SqlDouble p) { return (SqlChars)p.ToSqlString(); }
228 /// <summary>Converts the value from <c>SqlDecimal</c> to an equivalent <c>SqlChars</c> value.</summary>
229 public static SqlChars ToSqlChars(SqlDecimal p) { return (SqlChars)p.ToSqlString(); }
230 /// <summary>Converts the value from <c>SqlMoney</c> to an equivalent <c>SqlChars</c> value.</summary>
231 public static SqlChars ToSqlChars(SqlMoney p) { return (SqlChars)p.ToSqlString(); }
232
233 /// <summary>Converts the value from <c>SqlBoolean</c> to an equivalent <c>SqlChars</c> value.</summary>
234 public static SqlChars ToSqlChars(SqlBoolean p) { return (SqlChars)p.ToSqlString(); }
235 /// <summary>Converts the value from <c>SqlGuid</c> to an equivalent <c>SqlChars</c> value.</summary>
236 public static SqlChars ToSqlChars(SqlGuid p) { return (SqlChars)p.ToSqlString(); }
237 /// <summary>Converts the value from <c>SqlDateTime</c> to an equivalent <c>SqlChars</c> value.</summary>
238 public static SqlChars ToSqlChars(SqlDateTime p) { return (SqlChars)p.ToSqlString(); }
239 /// <summary>Converts the value from <c>SqlBinary</c> to an equivalent <c>SqlChars</c> value.</summary>
240 public static SqlChars ToSqlChars(SqlBinary p) { return p.IsNull? SqlChars.Null: new SqlChars(p.ToString().ToCharArray()); }
241
242 /// <summary>Converts the value from <c>Type</c> to an equivalent <c>SqlChars</c> value.</summary>
243 public static SqlChars ToSqlChars(Type p) { return p == null? SqlChars.Null: new SqlChars(p.FullName.ToCharArray()); }
244 /// <summary>Converts the value of a specified object to an equivalent <c>SqlChars</c> value.</summary>
245 public static SqlChars ToSqlChars(object p)
246 {
247 if (p == null || p is DBNull) return SqlChars.Null;
248
249 if (p is SqlChars) return (SqlChars)p;
250
251 // Scalar Types.
252 //
253 if (p is String) return ToSqlChars((String)p);
254 if (p is Char[]) return ToSqlChars((Char[])p);
255 if (p is Byte[]) return ToSqlChars((Byte[])p);
256 if (p is Binary) return ToSqlChars(((Binary)p).ToArray());
257
258 if (p is SByte) return ToSqlChars((SByte)p);
259 if (p is Int16) return ToSqlChars((Int16)p);
260 if (p is Int32) return ToSqlChars((Int32)p);
261 if (p is Int64) return ToSqlChars((Int64)p);
262
263 if (p is Byte) return ToSqlChars((Byte)p);
264 if (p is UInt16) return ToSqlChars((UInt16)p);
265 if (p is UInt32) return ToSqlChars((UInt32)p);
266 if (p is UInt64) return ToSqlChars((UInt64)p);
267
268 if (p is Single) return ToSqlChars((Single)p);
269 if (p is Double) return ToSqlChars((Double)p);
270
271 if (p is Boolean) return ToSqlChars((Boolean)p);
272 if (p is Decimal) return ToSqlChars((Decimal)p);
273
274 // SqlTypes
275 //
276 if (p is SqlString) return ToSqlChars((SqlString)p);
277
278 if (p is SqlByte) return ToSqlChars((SqlByte)p);
279 if (p is SqlInt16) return ToSqlChars((SqlInt16)p);
280 if (p is SqlInt32) return ToSqlChars((SqlInt32)p);
281 if (p is SqlInt64) return ToSqlChars((SqlInt64)p);
282
283 if (p is SqlSingle) return ToSqlChars((SqlSingle)p);
284 if (p is SqlDouble) return ToSqlChars((SqlDouble)p);
285 if (p is SqlDecimal) return ToSqlChars((SqlDecimal)p);
286 if (p is SqlMoney) return ToSqlChars((SqlMoney)p);
287
288 if (p is SqlBoolean) return ToSqlChars((SqlBoolean)p);
289 if (p is SqlBinary) return ToSqlChars((SqlBinary)p);
290 if (p is Type) return ToSqlChars((Type)p);
291
292 return new SqlChars(ToString(p).ToCharArray());
293 }
294
295 #endregion
296
297 #endif
298
299 #endregion
300
301 #region Other Types
302
303 #region Binary
304
305 // Scalar Types.
306 //
307 /// <summary>Converts the value from <c>String</c> to an equivalent <c>Byte[]</c> value.</summary>
308 public static Binary ToLinqBinary(String p) { return p == null? null: new Binary(System.Text.Encoding.UTF8.GetBytes(p)); }
309 /// <summary>Converts the value from <c>Byte</c> to an equivalent <c>Byte[]</c> value.</summary>
310 public static Binary ToLinqBinary(Byte p) { return new Binary(new byte[]{p}); }
311 /// <summary>Converts the value from <c>SByte</c> to an equivalent <c>Byte[]</c> value.</summary>
312 [CLSCompliant(false)]
313 public static Binary ToLinqBinary(SByte p) { return new Binary(new byte[]{checked((Byte)p)}); }
314 /// <summary>Converts the value from <c>Decimal</c> to an equivalent <c>Byte[]</c> value.</summary>
315 public static Binary ToLinqBinary(Decimal p)
316 {
317 var bits = Decimal.GetBits(p);
318 var bytes = new Byte[Buffer.ByteLength(bits)];
319
320 Buffer.BlockCopy(bits, 0, bytes, 0, bytes.Length);
321 return new Binary(bytes);
322 }
323 /// <summary>Converts the value from <c>Int16</c> to an equivalent <c>Byte[]</c> value.</summary>
324 public static Binary ToLinqBinary(Int16 p) { return new Binary(BitConverter.GetBytes(p)); }
325 /// <summary>Converts the value from <c>Int32</c> to an equivalent <c>Byte[]</c> value.</summary>
326 public static Binary ToLinqBinary(Int32 p) { return new Binary(BitConverter.GetBytes(p)); }
327 /// <summary>Converts the value from <c>Int64</c> to an equivalent <c>Byte[]</c> value.</summary>
328 public static Binary ToLinqBinary(Int64 p) { return new Binary(BitConverter.GetBytes(p)); }
329
330 /// <summary>Converts the value from <c>UInt16</c> to an equivalent <c>Byte[]</c> value.</summary>
331 [CLSCompliant(false)]
332 public static Binary ToLinqBinary(UInt16 p) { return new Binary(BitConverter.GetBytes(p)); }
333 /// <summary>Converts the value from <c>UInt32</c> to an equivalent <c>Byte[]</c> value.</summary>
334 [CLSCompliant(false)]
335 public static Binary ToLinqBinary(UInt32 p) { return new Binary(BitConverter.GetBytes(p)); }
336 /// <summary>Converts the value from <c>UInt64</c> to an equivalent <c>Byte[]</c> value.</summary>
337 [CLSCompliant(false)]
338 public static Binary ToLinqBinary(UInt64 p) { return new Binary(BitConverter.GetBytes(p)); }
339
340 /// <summary>Converts the value from <c>Single</c> to an equivalent <c>Byte[]</c> value.</summary>
341 public static Binary ToLinqBinary(Single p) { return new Binary(BitConverter.GetBytes(p)); }
342 /// <summary>Converts the value from <c>Double</c> to an equivalent <c>Byte[]</c> value.</summary>
343 public static Binary ToLinqBinary(Double p) { return new Binary(BitConverter.GetBytes(p)); }
344
345 /// <summary>Converts the value from <c>Boolean</c> to an equivalent <c>Byte[]</c> value.</summary>
346 public static Binary ToLinqBinary(Boolean p) { return new Binary(BitConverter.GetBytes(p)); }
347 /// <summary>Converts the value from <c>Char</c> to an equivalent <c>Byte[]</c> value.</summary>
348 public static Binary ToLinqBinary(Char p) { return new Binary(BitConverter.GetBytes(p)); }
349 #if !SILVERLIGHT
350 /// <summary>Converts the value from <c>DateTime</c> to an equivalent <c>Byte[]</c> value.</summary>
351 public static Binary ToLinqBinary(DateTime p) { return new Binary(ToByteArray(p.ToBinary())); }
352 /// <summary>Converts the value from <c>DateTimeOffset</c> to an equivalent <c>Byte[]</c> value.</summary>
353 public static Binary ToLinqBinary(DateTimeOffset p) { return new Binary(ToByteArray(p.LocalDateTime.ToBinary())); }
354 #endif
355 public static Binary ToLinqBinary(Byte[] p) { return new Binary(p); }
356 /// <summary>Converts the value from <c>TimeSpan</c> to an equivalent <c>Byte[]</c> value.</summary>
357 public static Binary ToLinqBinary(TimeSpan p) { return new Binary(ToByteArray(p.Ticks)); }
358 /// <summary>Converts the value from <c>Stream</c> to an equivalent <c>Byte[]</c> value.</summary>
359 public static Binary ToLinqBinary(Stream p)
360 {
361 if (p == null) return null;
362 if (p is MemoryStream) return ((MemoryStream)p).ToArray();
363
364 var position = p.Seek(0, SeekOrigin.Begin);
365 var bytes = new Byte[p.Length];
366 p.Read(bytes, 0, bytes.Length);
367 p.Position = position;
368
369 return new Binary(bytes);
370 }
371 /// <summary>Converts the value from <c>Char[]</c> to an equivalent <c>Byte[]</c> value.</summary>
372 public static Binary ToLinqBinary(Char[] p)
373 {
374 var bytes = new Byte[Buffer.ByteLength(p)];
375
376 Buffer.BlockCopy(p, 0, bytes, 0, bytes.Length);
377 return new Binary(bytes);
378 }
379 /// <summary>Converts the value from <c>Guid</c> to an equivalent <c>Byte[]</c> value.</summary>
380 public static Binary ToLinqBinary(Guid p) { return p == Guid.Empty? null: new Binary(p.ToByteArray()); }
381
382 // Nullable Types.
383 //
384 /// <summary>Converts the value from <c>SByte?</c> to an equivalent <c>Byte[]</c> value.</summary>
385 [CLSCompliant(false)]
386 public static Binary ToLinqBinary(SByte? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
387 /// <summary>Converts the value from <c>Int16?</c> to an equivalent <c>Byte[]</c> value.</summary>
388 public static Binary ToLinqBinary(Int16? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
389 /// <summary>Converts the value from <c>Int32?</c> to an equivalent <c>Byte[]</c> value.</summary>
390 public static Binary ToLinqBinary(Int32? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
391 /// <summary>Converts the value from <c>Int64?</c> to an equivalent <c>Byte[]</c> value.</summary>
392 public static Binary ToLinqBinary(Int64? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
393
394 /// <summary>Converts the value from <c>Byte?</c> to an equivalent <c>Byte[]</c> value.</summary>
395 public static Binary ToLinqBinary(Byte? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
396 /// <summary>Converts the value from <c>UInt16?</c> to an equivalent <c>Byte[]</c> value.</summary>
397 [CLSCompliant(false)]
398 public static Binary ToLinqBinary(UInt16? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
399 /// <summary>Converts the value from <c>UInt32?</c> to an equivalent <c>Byte[]</c> value.</summary>
400 [CLSCompliant(false)]
401 public static Binary ToLinqBinary(UInt32? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
402 /// <summary>Converts the value from <c>UInt64?</c> to an equivalent <c>Byte[]</c> value.</summary>
403 [CLSCompliant(false)]
404 public static Binary ToLinqBinary(UInt64? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
405
406 /// <summary>Converts the value from <c>Single?</c> to an equivalent <c>Byte[]</c> value.</summary>
407 public static Binary ToLinqBinary(Single? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
408 /// <summary>Converts the value from <c>Double?</c> to an equivalent <c>Byte[]</c> value.</summary>
409 public static Binary ToLinqBinary(Double? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
410
411 /// <summary>Converts the value from <c>Boolean?</c> to an equivalent <c>Byte[]</c> value.</summary>
412 public static Binary ToLinqBinary(Boolean? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
413 /// <summary>Converts the value from <c>Decimal?</c> to an equivalent <c>Byte[]</c> value.</summary>
414 public static Binary ToLinqBinary(Decimal? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
415 /// <summary>Converts the value from <c>Char?</c> to an equivalent <c>Byte[]</c> value.</summary>
416 public static Binary ToLinqBinary(Char? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
417 /// <summary>Converts the value from <c>DateTime?</c> to an equivalent <c>Byte[]</c> value.</summary>
418 public static Binary ToLinqBinary(DateTime? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
419 /// <summary>Converts the value from <c>DateTimeOffset?</c> to an equivalent <c>Byte[]</c> value.</summary>
420 public static Binary ToLinqBinary(DateTimeOffset? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
421 /// <summary>Converts the value from <c>TimeSpan?</c> to an equivalent <c>Byte[]</c> value.</summary>
422 public static Binary ToLinqBinary(TimeSpan? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
423 /// <summary>Converts the value from <c>Guid?</c> to an equivalent <c>Byte[]</c> value.</summary>
424 public static Binary ToLinqBinary(Guid? p) { return p.HasValue? new Binary(ToByteArray(p.Value)): null; }
425
426 #if !SILVERLIGHT
427
428 // SqlTypes
429 //
430 /// <summary>Converts the value from <c>SqlBinary</c> to an equivalent <c>Byte[]</c> value.</summary>
431 public static Binary ToLinqBinary(SqlBinary p) { return p.IsNull? null: new Binary(p.Value); }
432 /// <summary>Converts the value from <c>SqlBytes</c> to an equivalent <c>Byte[]</c> value.</summary>
433 public static Binary ToLinqBinary(SqlBytes p) { return p.IsNull? null: new Binary(p.Value); }
434 /// <summary>Converts the value from <c>SqlGuid</c> to an equivalent <c>Byte[]</c> value.</summary>
435 public static Binary ToLinqBinary(SqlGuid p) { return p.IsNull? null: new Binary(p.ToByteArray()); }
436 /// <summary>Converts the value from <c>SqlString</c> to an equivalent <c>Byte[]</c> value.</summary>
437 public static Binary ToLinqBinary(SqlString p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
438
439 /// <summary>Converts the value from <c>SqlByte</c> to an equivalent <c>Byte[]</c> value.</summary>
440 public static Binary ToLinqBinary(SqlByte p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
441 /// <summary>Converts the value from <c>SqlInt16</c> to an equivalent <c>Byte[]</c> value.</summary>
442 public static Binary ToLinqBinary(SqlInt16 p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
443 /// <summary>Converts the value from <c>SqlInt32</c> to an equivalent <c>Byte[]</c> value.</summary>
444 public static Binary ToLinqBinary(SqlInt32 p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
445 /// <summary>Converts the value from <c>SqlInt64</c> to an equivalent <c>Byte[]</c> value.</summary>
446 public static Binary ToLinqBinary(SqlInt64 p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
447
448 /// <summary>Converts the value from <c>SqlSingle</c> to an equivalent <c>Byte[]</c> value.</summary>
449 public static Binary ToLinqBinary(SqlSingle p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
450 /// <summary>Converts the value from <c>SqlDouble</c> to an equivalent <c>Byte[]</c> value.</summary>
451 public static Binary ToLinqBinary(SqlDouble p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
452 /// <summary>Converts the value from <c>SqlDecimal</c> to an equivalent <c>Byte[]</c> value.</summary>
453 public static Binary ToLinqBinary(SqlDecimal p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
454 /// <summary>Converts the value from <c>SqlMoney</c> to an equivalent <c>Byte[]</c> value.</summary>
455 public static Binary ToLinqBinary(SqlMoney p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
456
457 /// <summary>Converts the value from <c>SqlBoolean</c> to an equivalent <c>Byte[]</c> value.</summary>
458 public static Binary ToLinqBinary(SqlBoolean p) { return p.IsNull? null: new Binary(ToByteArray(p.Value)); }
459
460 #endif
461
462 /// <summary>Converts the value of a specified object to an equivalent <c>Byte[]</c> value.</summary>
463 public static Binary ToLinqBinary(object p)
464 {
465 if (p == null || p is DBNull) return null;
466
467 if (p is Byte[]) return new Binary((Byte[])p);
468 if (p is Binary) return (Binary)p;
469
470 // Scalar Types.
471 //
472 if (p is String) return ToLinqBinary((String)p);
473 if (p is Byte) return ToLinqBinary((Byte)p);
474 if (p is SByte) return ToLinqBinary((SByte)p);
475 if (p is Decimal) return ToLinqBinary((Decimal)p);
476 if (p is Int16) return ToLinqBinary((Int16)p);
477 if (p is Int32) return ToLinqBinary((Int32)p);
478 if (p is Int64) return ToLinqBinary((Int64)p);
479
480 if (p is UInt16) return ToLinqBinary((UInt16)p);
481 if (p is UInt32) return ToLinqBinary((UInt32)p);
482 if (p is UInt64) return ToLinqBinary((UInt64)p);
483
484 if (p is Single) return ToLinqBinary((Single)p);
485 if (p is Double) return ToLinqBinary((Double)p);
486
487 if (p is Boolean) return ToLinqBinary((Boolean)p);
488 if (p is DateTime) return ToLinqBinary((DateTime)p);
489 if (p is DateTimeOffset) return ToLinqBinary((DateTimeOffset)p);
490 if (p is TimeSpan) return ToLinqBinary((TimeSpan)p);
491 if (p is Stream) return ToLinqBinary((Stream)p);
492 if (p is Char[]) return ToLinqBinary((Char[])p);
493 if (p is Guid) return ToLinqBinary((Guid)p);
494
495 #if !SILVERLIGHT
496
497 // SqlTypes
498 //
499 if (p is SqlBinary) return ToLinqBinary((SqlBinary)p);
500 if (p is SqlBytes) return ToLinqBinary((SqlBytes)p);
501 if (p is SqlGuid) return ToLinqBinary((SqlGuid)p);
502 if (p is SqlString) return ToLinqBinary((SqlString)p);
503
504 if (p is SqlByte) return ToLinqBinary((SqlByte)p);
505 if (p is SqlInt16) return ToLinqBinary((SqlInt16)p);
506 if (p is SqlInt32) return ToLinqBinary((SqlInt32)p);
507 if (p is SqlInt64) return ToLinqBinary((SqlInt64)p);
508
509 if (p is SqlSingle) return ToLinqBinary((SqlSingle)p);
510 if (p is SqlDouble) return ToLinqBinary((SqlDouble)p);
511 if (p is SqlDecimal) return ToLinqBinary((SqlDecimal)p);
512 if (p is SqlMoney) return ToLinqBinary((SqlMoney)p);
513
514 if (p is SqlBoolean) return ToLinqBinary((SqlBoolean)p);
515
516 #endif
517
518 throw CreateInvalidCastException(p.GetType(), typeof(Byte[]));
519 }
520
521 #endregion
522
523 #region Char[]
524
525 // Scalar Types.
526 //
527 /// <summary>Converts the value from <c>String</c> to an equivalent <c>Char[]</c> value.</summary>
528 public static Char[] ToCharArray(String p) { return p == null? null: p.ToCharArray(); }
529
530 #if !SILVERLIGHT
531
532 // SqlTypes
533 //
534 /// <summary>Converts the value from <c>SqlString</c> to an equivalent <c>Char[]</c> value.</summary>
535 public static Char[] ToCharArray(SqlString p) { return p.IsNull? null: p.Value.ToCharArray(); }
536 /// <summary>Converts the value from <c>SqlChars</c> to an equivalent <c>Char[]</c> value.</summary>
537 public static Char[] ToCharArray(SqlChars p) { return p.IsNull? null: p.Value; }
538
539 #endif
540
541 /// <summary>Converts the value from <c>Byte[]</c> to an equivalent <c>Char[]</c> value.</summary>
542 public static Char[] ToCharArray(Byte[] p)
543 {
544 if (p == null) return null;
545
546 var chars = new Char[p.Length / sizeof(Char)];
547
548 Buffer.BlockCopy(p, 0, chars, 0, p.Length);
549 return chars;
550 }
551
552 public static Char[] ToCharArray(Binary p)
553 {
554 if (p == null) return null;
555
556 var chars = new Char[p.Length / sizeof(Char)];
557
558 Buffer.BlockCopy(p.ToArray(), 0, chars, 0, p.Length);
559 return chars;
560 }
561
562 /// <summary>Converts the value of a specified object to an equivalent <c>Char[]</c> value.</summary>
563 public static Char[] ToCharArray(object p)
564 {
565 if (p == null || p is DBNull) return null;
566
567 if (p is Char[]) return (Char[])p;
568
569 // Scalar Types.
570 //
571 if (p is String) return ToCharArray((String)p);
572
573 #if !SILVERLIGHT
574
575 // SqlTypes
576 //
577 if (p is SqlString) return ToCharArray((SqlString)p);
578 if (p is SqlChars) return ToCharArray((SqlChars)p);
579
580 #endif
581 if (p is Byte[]) return ToCharArray((Byte[])p);
582 if (p is Binary) return ToCharArray(((Binary)p).ToArray());
583
584 return ToString(p).ToCharArray();
585 }
586
587 #endregion
588
589 #region XmlReader
590
591 #if !SILVERLIGHT
592
593 // Scalar Types.
594 //
595 /// <summary>Converts the value from <c>String</c> to an equivalent <c>XmlReader</c> value.</summary>
596 public static XmlReader ToXmlReader(String p) { return p == null? null: new XmlTextReader(new StringReader(p)); }
597
598 // SqlTypes
599 //
600 /// <summary>Converts the value from <c>SqlXml</c> to an equivalent <c>XmlReader</c> value.</summary>
601 public static XmlReader ToXmlReader(SqlXml p) { return p.IsNull? null: p.CreateReader(); }
602 /// <summary>Converts the value from <c>SqlString</c> to an equivalent <c>XmlReader</c> value.</summary>
603 public static XmlReader ToXmlReader(SqlString p) { return p.IsNull? null: new XmlTextReader(new StringReader(p.Value)); }
604 /// <summary>Converts the value from <c>SqlChars</c> to an equivalent <c>XmlReader</c> value.</summary>
605 public static XmlReader ToXmlReader(SqlChars p) { return p.IsNull? null: new XmlTextReader(new StringReader(p.ToSqlString().Value)); }
606 /// <summary>Converts the value from <c>SqlBinary</c> to an equivalent <c>XmlReader</c> value.</summary>
607 public static XmlReader ToXmlReader(SqlBinary p) { return p.IsNull? null: new XmlTextReader(new MemoryStream(p.Value)); }
608
609 // Other Types.
610 //
611 /// <summary>Converts the value from <c>Stream</c> to an equivalent <c>XmlReader</c> value.</summary>
612 public static XmlReader ToXmlReader(Stream p) { return p == null? null: new XmlTextReader(p); }
613 /// <summary>Converts the value from <c>TextReader</c> to an equivalent <c>XmlReader</c> value.</summary>
614 public static XmlReader ToXmlReader(TextReader p) { return p == null? null: new XmlTextReader(p); }
615 /// <summary>Converts the value from <c>XmlDocument</c> to an equivalent <c>XmlReader</c> value.</summary>
616 public static XmlReader ToXmlReader(XmlDocument p) { return p == null? null: new XmlTextReader(new StringReader(p.InnerXml)); }
617
618 /// <summary>Converts the value from <c>Char[]</c> to an equivalent <c>XmlReader</c> value.</summary>
619 public static XmlReader ToXmlReader(Char[] p) { return p == null? null: new XmlTextReader(new StringReader(new string(p))); }
620 /// <summary>Converts the value from <c>Byte[]</c> to an equivalent <c>XmlReader</c> value.</summary>
621 public static XmlReader ToXmlReader(Byte[] p) { return p == null? null: new XmlTextReader(new MemoryStream(p)); }
622 public static XmlReader ToXmlReader(Binary p) { return p == null? null: new XmlTextReader(new MemoryStream(p.ToArray())); }
623
624 /// <summary>Converts the value of a specified object to an equivalent <c>XmlReader</c> value.</summary>
625 public static XmlReader ToXmlReader(object p)
626 {
627 if (p == null || p is DBNull) return null;
628
629 if (p is XmlReader) return (XmlReader)p;
630
631 // Scalar Types.
632 //
633 if (p is String) return ToXmlReader((String)p);
634
635 // SqlTypes
636 //
637 if (p is SqlXml) return ToXmlReader((SqlXml)p);
638 if (p is SqlString) return ToXmlReader((SqlString)p);
639 if (p is SqlChars) return ToXmlReader((SqlChars)p);
640 if (p is SqlBinary) return ToXmlReader((SqlBinary)p);
641
642 // Other Types.
643 //
644 if (p is XmlDocument) return ToXmlReader((XmlDocument)p);
645
646 if (p is Char[]) return ToXmlReader((Char[])p);
647 if (p is Byte[]) return ToXmlReader((Byte[])p);
648 if (p is Binary) return ToXmlReader(((Binary)p).ToArray());
649
650 throw CreateInvalidCastException(p.GetType(), typeof(XmlReader));
651 }
652
653 #endif
654
655 #endregion
656
657 #region XmlDocument
658
659 #if !SILVERLIGHT
660
661 // Scalar Types.
662 //
663 /// <summary>Converts the value from <c>String</c> to an equivalent <c>XmlDocument</c> value.</summary>
664 public static XmlDocument ToXmlDocument(String p)
665 {
666 if (string.IsNullOrEmpty(p)) return null;
667
668 var doc = new XmlDocument();
669
670 doc.LoadXml(p);
671
672 return doc;
673 }
674
675 // SqlTypes
676 //
677 /// <summary>Converts the value from <c>SqlString</c> to an equivalent <c>XmlDocument</c> value.</summary>
678 public static XmlDocument ToXmlDocument(SqlString p) { return p.IsNull? null: ToXmlDocument(p.Value); }
679 /// <summary>Converts the value from <c>SqlXml</c> to an equivalent <c>XmlDocument</c> value.</summary>
680 public static XmlDocument ToXmlDocument(SqlXml p) { return p.IsNull? null: ToXmlDocument(p.Value); }
681 /// <summary>Converts the value from <c>SqlChars</c> to an equivalent <c>XmlDocument</c> value.</summary>
682 public static XmlDocument ToXmlDocument(SqlChars p) { return p.IsNull? null: ToXmlDocument(p.ToSqlString().Value); }
683 /// <summary>Converts the value from <c>SqlBinary</c> to an equivalent <c>XmlDocument</c> value.</summary>
684 public static XmlDocument ToXmlDocument(SqlBinary p) { return p.IsNull? null: ToXmlDocument(new MemoryStream(p.Value)); }
685
686 // Other Types.
687 //
688 /// <summary>Converts the value from <c>Stream</c> to an equivalent <c>XmlDocument</c> value.</summary>
689 public static XmlDocument ToXmlDocument(Stream p)
690 {
691 if (p == null) return null;
692
693 var doc = new XmlDocument();
694
695 doc.Load(p);
696
697 return doc;
698 }
699
700 /// <summary>Converts the value from <c>TextReader</c> to an equivalent <c>XmlDocument</c> value.</summary>
701 public static XmlDocument ToXmlDocument(TextReader p)
702 {
703 if (p == null) return null;
704
705 var doc = new XmlDocument();
706
707 doc.Load(p);
708
709 return doc;
710 }
711
712 /// <summary>Converts the value from <c>XmlReader</c> to an equivalent <c>XmlDocument</c> value.</summary>
713 public static XmlDocument ToXmlDocument(XmlReader p)
714 {
715 if (p == null) return null;
716
717 var doc = new XmlDocument();
718
719 doc.Load(p);
720
721 return doc;
722 }
723
724 /// <summary>Converts the value from <c>Char[]</c> to an equivalent <c>XmlDocument</c> value.</summary>
725 public static XmlDocument ToXmlDocument(Char[] p) { return p == null || p.Length == 0? null: ToXmlDocument(new string(p)); }
726 /// <summary>Converts the value from <c>Byte[]</c> to an equivalent <c>XmlDocument</c> value.</summary>
727 public static XmlDocument ToXmlDocument(Byte[] p) { return p == null || p.Length == 0? null: ToXmlDocument(new MemoryStream(p)); }
728 public static XmlDocument ToXmlDocument(Binary p) { return p == null || p.Length == 0? null: ToXmlDocument(new MemoryStream(p.ToArray())); }
729
730 /// <summary>Converts the value of a specified object to an equivalent <c>XmlDocument</c> value.</summary>
731 public static XmlDocument ToXmlDocument(object p)
732 {
733 if (p == null || p is DBNull) return null;
734
735 if (p is XmlDocument) return (XmlDocument)p;
736
737 // Scalar Types.
738 //
739 if (p is String) return ToXmlDocument((String)p);
740
741 // SqlTypes
742 //
743 if (p is SqlChars) return ToXmlDocument((SqlChars)p);
744 if (p is SqlBinary) return ToXmlDocument((SqlBinary)p);
745
746 // Other Types.
747 //
748
749 if (p is Char[]) return ToXmlDocument((Char[])p);
750 if (p is Byte[]) return ToXmlDocument((Byte[])p);
751 if (p is Binary) return ToXmlDocument(((Binary)p).ToArray());
752
753 throw CreateInvalidCastException(p.GetType(), typeof(XmlDocument));
754 }
755
756 #endif
757
758 #endregion
759
760 #region XElement
761
762 #if !SILVERLIGHT
763
764 // Scalar Types.
765 //
766 /// <summary>Converts the value from <c>String</c> to an equivalent <c>XElement</c> value.</summary>
767 public static XElement ToXElement(String p)
768 {
769 if (string.IsNullOrEmpty(p)) return null;
770
771 var doc = XElement.Parse(p);
772
773 return doc;
774 }
775
776 // SqlTypes
777 //
778 /// <summary>Converts the value from <c>SqlString</c> to an equivalent <c>XElement</c> value.</summary>
779 public static XElement ToXElement(SqlString p) { return p.IsNull ? null : ToXElement(p.Value); }
780 /// <summary>Converts the value from <c>SqlXml</c> to an equivalent <c>XElement</c> value.</summary>
781 public static XElement ToXElement(SqlXml p) { return p.IsNull ? null : ToXElement(p.Value); }
782 /// <summary>Converts the value from <c>SqlChars</c> to an equivalent <c>XElement</c> value.</summary>
783 public static XElement ToXElement(SqlChars p) { return p.IsNull ? null : ToXElement(p.ToSqlString().Value); }
784 /// <summary>Converts the value from <c>SqlBinary</c> to an equivalent <c>XElement</c> value.</summary>
785 public static XElement ToXElement(SqlBinary p) { return p.IsNull ? null : ToXElement(new MemoryStream(p.Value)); }
786
787 // Other Types.
788 //
789 /// <summary>Converts the value from <c>Stream</c> to an equivalent <c>XElement</c> value.</summary>
790 public static XElement ToXElement(Stream p)
791 {
792 if (p == null) return null;
793
794 using (XmlReader r = XmlReader.Create(p))
795 return XElement.Load(r);
796 }
797
798 /// <summary>Converts the value from <c>TextReader</c> to an equivalent <c>XElement</c> value.</summary>
799 public static XElement ToXElement(TextReader p)
800 {
801 if (p == null) return null;
802
803 var doc = XElement.Load(p);
804
805 return doc;
806 }
807
808 /// <summary>Converts the value from <c>XmlReader</c> to an equivalent <c>XElement</c> value.</summary>
809 public static XElement ToXElement(XmlReader p)
810 {
811 if (p == null) return null;
812
813 var doc = XElement.Load(p);
814
815 return doc;
816 }
817
818 /// <summary>Converts the value from <c>Char[]</c> to an equivalent <c>XElement</c> value.</summary>
819 public static XElement ToXElement(Char[] p) { return p == null || p.Length == 0 ? null : ToXElement(new string(p)); }
820 /// <summary>Converts the value from <c>Byte[]</c> to an equivalent <c>XElement</c> value.</summary>
821 public static XElement ToXElement(Byte[] p) { return p == null || p.Length == 0 ? null : ToXElement(new MemoryStream(p)); }
822 public static XElement ToXElement(Binary p) { return p == null || p.Length == 0 ? null : ToXElement(new MemoryStream(p.ToArray())); }
823
824 /// <summary>Converts the value of a specified object to an equivalent <c>XElement</c> value.</summary>
825 public static XElement ToXElement(object p)
826 {
827 if (p == null || p is DBNull) return null;
828
829 if (p is XElement) return (XElement)p;
830
831 // Scalar Types.
832 //
833 if (p is String) return ToXElement((String)p);
834
835 // SqlTypes
836 //
837 if (p is SqlChars) return ToXElement((SqlChars)p);
838 if (p is SqlBinary) return ToXElement((SqlBinary)p);
839
840 // Other Types.
841 //
842
843 if (p is Char[]) return ToXElement((Char[])p);
844 if (p is Byte[]) return ToXElement((Byte[])p);
845 if (p is Binary) return ToXElement(((Binary)p).ToArray());
846
847 throw CreateInvalidCastException(p.GetType(), typeof(XElement));
848 }
849
850 #endif
851
852 #endregion
853
854 #endregion
855
856 #region ChangeTypeFromString
857
858 public static object ChangeTypeFromString(string str, Type type)
859 {
860 if (str == null)
861 return null;
862
863 if (type == typeof(string))
864 return str;
865
866 var underlyingType = type;
867 var isNullable = false;
868
869 if (underlyingType.IsGenericType && underlyingType.GetGenericTypeDefinition() == typeof(Nullable<>))
870 {
871 isNullable = true;
872 underlyingType = underlyingType.GetGenericArguments()[0];
873 }
874
875 if (underlyingType.IsEnum)
876 return Enum.Parse(type, str, false);
877
878 if (isNullable)
879 {
880 switch (Type.GetTypeCode(underlyingType))
881 {
882 case TypeCode.Boolean : return ToNullableBoolean (str);
883 case TypeCode.Char : return ToNullableChar (str);
884 case TypeCode.SByte : return ToNullableSByte (str);
885 case TypeCode.Byte : return ToNullableByte (str);
886 case TypeCode.Int16 : return ToNullableInt16 (str);
887 case TypeCode.UInt16 : return ToNullableUInt16 (str);
888 case TypeCode.Int32 : return ToNullableInt32 (str);
889 case TypeCode.UInt32 : return ToNullableUInt32 (str);
890 case TypeCode.Int64 : return ToNullableInt64 (str);
891 case TypeCode.UInt64 : return ToNullableUInt64 (str);
892 case TypeCode.Single : return ToNullableSingle (str);
893 case TypeCode.Double : return ToNullableDouble (str);
894 case TypeCode.Decimal : return ToNullableDecimal (str);
895 case TypeCode.DateTime : return ToNullableDateTime(str);
896 case TypeCode.Object :
897 if (type == typeof(Guid)) return ToNullableGuid (str);
898 if (type == typeof(DateTimeOffset)) return ToNullableDateTimeOffset(str);
899 if (type == typeof(TimeSpan)) return ToNullableTimeSpan (str);
900 break;
901 default : break;
902 }
903 }
904 else
905 {
906 switch (Type.GetTypeCode(underlyingType))
907 {
908 case TypeCode.Boolean : return ToBoolean(str);
909 case TypeCode.Char : return ToChar (str);
910 case TypeCode.SByte : return ToSByte (str);
911 case TypeCode.Byte : return ToByte (str);
912 case TypeCode.Int16 : return ToInt16 (str);
913 case TypeCode.UInt16 : return ToUInt16 (str);
914 case TypeCode.Int32 : return ToInt32 (str);
915 case TypeCode.UInt32 : return ToUInt32 (str);
916 case TypeCode.Int64 : return ToInt64 (str);
917 case TypeCode.UInt64 : return ToUInt64 (str);
918 case TypeCode.Single : return ToSingle (str);
919 case TypeCode.Double : return ToDouble (str);
920 case TypeCode.Decimal : return ToDecimal (str);
921 case TypeCode.DateTime : return ToDateTime(str);
922 default : break;
923 }
924
925 if (type.IsArray)
926 {
927 if (type == typeof(byte[])) return ToByteArray(str);
928 }
929
930 if (type.IsClass)
931 {
932 if (type == typeof(Binary)) return ToLinqBinary (str);
933 }
934 }
935
936 if (type == typeof(Guid)) return ToGuid (str);
937 if (type == typeof(DateTimeOffset)) return ToDateTimeOffset(str);
938 if (type == typeof(TimeSpan)) return ToTimeSpan (str);
939
940 #if !SILVERLIGHT
941
942 if (type == typeof(SqlByte)) return ToSqlByte (str);
943 if (type == typeof(SqlInt16)) return ToSqlInt16 (str);
944 if (type == typeof(SqlInt32)) return ToSqlInt32 (str);
945 if (type == typeof(SqlInt64)) return ToSqlInt64 (str);
946 if (type == typeof(SqlSingle)) return ToSqlSingle (str);
947 if (type == typeof(SqlBoolean)) return ToSqlBoolean (str);
948 if (type == typeof(SqlDouble)) return ToSqlDouble (str);
949 if (type == typeof(SqlDateTime)) return ToSqlDateTime(str);
950 if (type == typeof(SqlDecimal)) return ToSqlDecimal (str);
951 if (type == typeof(SqlMoney)) return ToSqlMoney (str);
952 if (type == typeof(SqlString)) return ToSqlString (str);
953 if (type == typeof(SqlGuid)) return ToSqlGuid (str);
954
955 #endif
956
957 return System.Convert.ChangeType(str, type, Thread.CurrentThread.CurrentCulture);
958 }
959
960
961 #endregion
962
963 static Exception CreateInvalidCastException(Type originalType, Type conversionType)
964 {
965 return new InvalidCastException(string.Format(Resources.Convert_InvalidCast, originalType.FullName, conversionType.FullName));
966 }
967 }
968 }