PageRenderTime 52ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 1ms

/library/Library/CSListGeneric.cs

https://bitbucket.org/digitalizarte/coolstorage
C# | 3118 lines | 1632 code | 479 blank | 1007 comment | 113 complexity | e8dc0a6ce3948a29e781aa50817be43f MD5 | raw file
  1. #region License
  2. //=============================================================================
  3. // Vici CoolStorage - .NET Object Relational Mapping Library
  4. //
  5. // Copyright (c) 2004-2009 Philippe Leybaert
  6. //
  7. // Permission is hereby granted, free of charge, to any person obtaining a copy
  8. // of this software and associated documentation files (the "Software"), to deal
  9. // in the Software without restriction, including without limitation the rights
  10. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  11. // copies of the Software, and to permit persons to whom the Software is
  12. // furnished to do so, subject to the following conditions:
  13. //
  14. // The above copyright notice and this permission notice shall be included in
  15. // all copies or substantial portions of the Software.
  16. //
  17. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  20. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  22. // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  23. // IN THE SOFTWARE.
  24. //=============================================================================
  25. #endregion
  26. using System;
  27. using System.Collections;
  28. using System.Collections.Generic;
  29. using System.ComponentModel;
  30. using System.Data;
  31. using System.Linq;
  32. using System.Reflection;
  33. using System.Runtime.Serialization;
  34. using Vici.Core;
  35. namespace Vici.CoolStorage
  36. {
  37. [Serializable]
  38. public class CSList<TObjectType> : CSList, ITypedList, IList<TObjectType>, IList, IBindingList, IListSource where TObjectType : CSObject<TObjectType>
  39. {
  40. private List<TObjectType> _objectArray;
  41. private List<TObjectType> _removedObjects; // Only used for pure many-to-many relations
  42. private List<TObjectType> _addedObjects; // Only used for pure many-to-many relations
  43. [NonSerialized]
  44. private Dictionary<object, TObjectType> _objectMap;
  45. [NonSerialized]
  46. private Predicate<TObjectType> _filterPredicate;
  47. [OnDeserializing]
  48. private void BeforeDeserializing(StreamingContext context)
  49. {
  50. Schema = CSSchema.Get(typeof(TObjectType));
  51. if (!string.IsNullOrEmpty(Schema.DefaultSortExpression))
  52. OrderBy = Schema.DefaultSortExpression;
  53. }
  54. [OnDeserialized]
  55. private void AfterDeserializing(StreamingContext context)
  56. {
  57. if (Schema.KeyColumns.Count == 1)
  58. {
  59. string columnName = Schema.KeyColumns[0].Name;
  60. _objectMap = new Dictionary<object, TObjectType>();
  61. foreach (TObjectType csObject in _objectArray)
  62. _objectMap.Add(csObject.Data["#" + columnName].Value, csObject);
  63. }
  64. }
  65. /// <summary>
  66. /// Initializes a new instance of the <see cref="CSList&lt;TEntity&gt;"/> class.
  67. /// </summary>
  68. public CSList()
  69. : base(CSSchema.Get(typeof(TObjectType)))
  70. {
  71. }
  72. /// <summary>
  73. /// Initializes a new instance of the <see cref="CSList&lt;TEntity&gt;"/> class using a filter.
  74. /// </summary>
  75. /// <param name="filterExpression">The filter expression.</param>
  76. public CSList(string filterExpression)
  77. : this(new CSFilter(filterExpression))
  78. {
  79. }
  80. public CSList(string filterExpression, object parameters)
  81. : this(filterExpression, new CSParameterCollection(parameters))
  82. {
  83. }
  84. public CSList(string filterExpression, string paramName, object paramValue)
  85. : this(filterExpression, new CSParameterCollection(paramName, paramValue))
  86. {
  87. }
  88. /// <summary>
  89. /// Initializes a new instance of the <see cref="CSList&lt;TEntity&gt;"/> class using a filter.
  90. /// </summary>
  91. /// <param name="filterExpression">The filter expression.</param>
  92. /// <param name="paramName1">The param name1.</param>
  93. /// <param name="paramValue1">The param value1.</param>
  94. /// <param name="paramName2">The param name2.</param>
  95. /// <param name="paramValue2">The param value2.</param>
  96. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  97. : this(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  98. {
  99. }
  100. /// <summary>
  101. /// Initializes a new instance of the <see cref="CSList&lt;TEntity&gt;"/> class using a filter.
  102. /// </summary>
  103. /// <param name="filterExpression">The filter expression.</param>
  104. /// <param name="paramName1">The param name1.</param>
  105. /// <param name="paramValue1">The param value1.</param>
  106. /// <param name="paramName2">The param name2.</param>
  107. /// <param name="paramValue2">The param value2.</param>
  108. /// <param name="paramName3">The param name3.</param>
  109. /// <param name="paramValue3">The param value3.</param>
  110. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  111. : this(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  112. {
  113. }
  114. /// <summary>
  115. /// Initializes a new instance of the <see cref="CSList&lt;TEntity&gt;"/> class using a filter.
  116. /// </summary>
  117. /// <param name="filterExpression">The filter expression.</param>
  118. /// <param name="parameters">The parameters.</param>
  119. public CSList(string filterExpression, CSParameterCollection parameters)
  120. : this(new CSFilter(filterExpression, parameters))
  121. {
  122. }
  123. /// <summary>
  124. /// Initializes a new instance of the <see cref="CSList&lt;TEntity&gt;"/> class using a filter.
  125. /// </summary>
  126. /// <param name="filterExpression">The filter expression.</param>
  127. /// <param name="parameters">The parameters.</param>
  128. public CSList(string filterExpression, params CSParameter[] parameters)
  129. : this(new CSFilter(filterExpression, parameters))
  130. {
  131. }
  132. /// <summary>
  133. /// Initializes a new instance of the <see cref="CSList&lt;TEntity&gt;"/> class using a filter.
  134. /// </summary>
  135. /// <param name="filter">The filter.</param>
  136. public CSList(CSFilter filter)
  137. : this()
  138. {
  139. Filter = filter;
  140. }
  141. /// <summary>
  142. /// Initializes a new instance of the <see cref="CSList&lt;TEntity&gt;"/> class given a CSList of the same type.
  143. /// </summary>
  144. /// <param name="sourceCollection">The source collection.</param>
  145. public CSList(CSList<TObjectType> sourceCollection)
  146. : this()
  147. {
  148. OrderBy = sourceCollection.OrderBy;
  149. MaxRecords = sourceCollection.MaxRecords;
  150. StartRecord = sourceCollection.StartRecord;
  151. Filter = sourceCollection.Filter;
  152. FilterPredicate = sourceCollection.FilterPredicate;
  153. Relation = sourceCollection.Relation;
  154. RelationObject = sourceCollection.RelationObject;
  155. PrefetchPaths = sourceCollection.PrefetchPaths;
  156. }
  157. /// <summary>
  158. /// Gets or sets the element at the specified index.
  159. /// </summary>
  160. /// <returns>
  161. /// The element at the specified index.
  162. /// </returns>
  163. ///
  164. /// <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.
  165. /// </exception>
  166. ///
  167. /// <exception cref="T:System.NotSupportedException">
  168. /// The property is set and the <see cref="T:System.Collections.Generic.IList`1"/> is read-only.
  169. /// </exception>
  170. public TObjectType this[int i]
  171. {
  172. get
  173. {
  174. Populate();
  175. return _objectArray[i];
  176. }
  177. set
  178. {
  179. throw new NotSupportedException();
  180. }
  181. }
  182. /// <summary>
  183. /// Represents a new CSList generated from this list.
  184. /// </summary>
  185. /// <param name="filter">The filter.</param>
  186. /// <returns>
  187. /// This CSList fltered.
  188. /// </returns>
  189. public CSList<TObjectType> Where(CSFilter filter)
  190. {
  191. return FilteredBy(filter);
  192. }
  193. /// <summary>
  194. /// Represents a new CSList generated from this list.
  195. /// </summary>
  196. /// <param name="filter">The filter.</param>
  197. /// <returns>
  198. /// This CSList fltered.
  199. /// </returns>
  200. public CSList<TObjectType> Where(string filter)
  201. {
  202. return FilteredBy(new CSFilter(filter));
  203. }
  204. /// <summary>
  205. /// Represents a new CSList generated from this list.
  206. /// </summary>
  207. /// <param name="filter">The filter.</param>
  208. /// <param name="parameters">The parameters.</param>
  209. /// <returns>
  210. /// This CSList fltered.
  211. /// </returns>
  212. public CSList<TObjectType> Where(string filter, CSParameterCollection parameters)
  213. {
  214. return FilteredBy(new CSFilter(filter, parameters));
  215. }
  216. /// <summary>
  217. /// Represents a new CSList generated from this list.
  218. /// </summary>
  219. /// <param name="filter">The filter.</param>
  220. /// <param name="parameters">The parameters.</param>
  221. /// <returns>
  222. /// This CSList fltered.
  223. /// </returns>
  224. public CSList<TObjectType> Where(string filter, params CSParameter[] parameters)
  225. {
  226. return FilteredBy(new CSFilter(filter, parameters));
  227. }
  228. public CSList<TObjectType> Where(string filter, object parameters)
  229. {
  230. return FilteredBy(new CSFilter(filter, parameters));
  231. }
  232. /// <summary>
  233. /// Represents a new CSList generated from this list.
  234. /// </summary>
  235. /// <param name="filter">The filter.</param>
  236. /// <param name="paramName">Name of the param.</param>
  237. /// <param name="paramValue">The param value.</param>
  238. /// <returns>
  239. /// This CSList fltered.
  240. /// </returns>
  241. public CSList<TObjectType> Where(string filter, string paramName, object paramValue)
  242. {
  243. return FilteredBy(new CSFilter(filter, paramName, paramValue));
  244. }
  245. /// <summary>
  246. /// Represents a new CSList generated from this list.
  247. /// </summary>
  248. /// <param name="filter">The filter.</param>
  249. /// <param name="paramName1">The param name1.</param>
  250. /// <param name="paramValue1">The param value1.</param>
  251. /// <param name="paramName2">The param name2.</param>
  252. /// <param name="paramValue2">The param value2.</param>
  253. /// <returns>
  254. /// This CSList fltered.
  255. /// </returns>
  256. public CSList<TObjectType> Where(string filter, string paramName1, object paramValue1, string paramName2, object paramValue2)
  257. {
  258. return FilteredBy(new CSFilter(filter, paramName1, paramValue1, paramName2, paramValue2));
  259. }
  260. /// <summary>
  261. /// Represents a new CSList generated from this list.
  262. /// </summary>
  263. /// <param name="filter">The filter.</param>
  264. /// <param name="paramName1">The param name1.</param>
  265. /// <param name="paramValue1">The param value1.</param>
  266. /// <param name="paramName2">The param name2.</param>
  267. /// <param name="paramValue2">The param value2.</param>
  268. /// <param name="paramName3">The param name3.</param>
  269. /// <param name="paramValue3">The param value3.</param>
  270. /// <returns>
  271. /// This CSList fltered.
  272. /// </returns>
  273. public CSList<TObjectType> Where(string filter, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  274. {
  275. return FilteredBy(new CSFilter(filter, paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3));
  276. }
  277. /// <summary>
  278. /// Represents a new CSList generated from this list.
  279. /// </summary>
  280. /// <param name="predicate">The predicate.</param>
  281. /// <returns>
  282. /// This CSList fltered.
  283. /// </returns>
  284. public CSList<TObjectType> Where(Predicate<TObjectType> predicate)
  285. {
  286. return FilteredBy(predicate);
  287. }
  288. public CSList<TObjectType> FilteredBy(CSFilter filter)
  289. {
  290. CSList<TObjectType> newCollection = Clone();
  291. newCollection.Filter = Filter.And(filter);
  292. return newCollection;
  293. }
  294. public CSList<TObjectType> FilteredBy(string filter)
  295. {
  296. return FilteredBy(new CSFilter(filter));
  297. }
  298. public CSList<TObjectType> FilteredBy(string filter, CSParameterCollection parameters)
  299. {
  300. return FilteredBy(new CSFilter(filter, parameters));
  301. }
  302. public CSList<TObjectType> FilteredBy(string filter, params CSParameter[] parameters)
  303. {
  304. return FilteredBy(new CSFilter(filter, parameters));
  305. }
  306. public CSList<TObjectType> FilteredBy(string filter, object parameters)
  307. {
  308. return FilteredBy(new CSFilter(filter, parameters));
  309. }
  310. public CSList<TObjectType> FilteredBy(string filter, string paramName, object paramValue)
  311. {
  312. return FilteredBy(new CSFilter(filter, paramName, paramValue));
  313. }
  314. public CSList<TObjectType> FilteredBy(string filter, string paramName1, object paramValue1, string paramName2, object paramValue2)
  315. {
  316. return FilteredBy(new CSFilter(filter, paramName1, paramValue1, paramName2, paramValue2));
  317. }
  318. public CSList<TObjectType> FilteredBy(string filter, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  319. {
  320. return FilteredBy(new CSFilter(filter, paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3));
  321. }
  322. public CSList<TObjectType> FilteredBy(Predicate<TObjectType> predicate)
  323. {
  324. CSList<TObjectType> newCollection = Clone();
  325. newCollection.FilterPredicate += predicate;
  326. return newCollection;
  327. }
  328. public CSList<TObjectType> OrderedBy(string orderBy)
  329. {
  330. CSList<TObjectType> newCollection = Clone();
  331. newCollection.OrderBy = orderBy;
  332. return newCollection;
  333. }
  334. public CSList<TObjectType> ThenBy(string orderBy)
  335. {
  336. if (string.IsNullOrEmpty(OrderBy))
  337. throw new CSException(".ThenBy() called without .OrderedBy()");
  338. CSList<TObjectType> newCollection = Clone();
  339. newCollection.OrderBy += "," + orderBy;
  340. return newCollection;
  341. }
  342. public CSList<TObjectType> Range(int from, int numRecords)
  343. {
  344. CSList<TObjectType> newCollection = Clone();
  345. newCollection.MaxRecords = numRecords;
  346. newCollection.StartRecord = from;
  347. return newCollection;
  348. }
  349. public CSList<TObjectType> LimitTo(int numRecords)
  350. {
  351. CSList<TObjectType> newCollection = Clone();
  352. newCollection.MaxRecords = numRecords;
  353. return newCollection;
  354. }
  355. public CSList<TObjectType> WithPrefetch(params string[] prefetchPaths)
  356. {
  357. CSList<TObjectType> newCollection = Clone();
  358. newCollection.PrefetchPaths = prefetchPaths;
  359. return newCollection;
  360. }
  361. private CSList<TObjectType> Clone()
  362. {
  363. CSList<TObjectType> newCollection = (CSList<TObjectType>)Activator.CreateInstance(GetType());
  364. newCollection.OrderBy = OrderBy;
  365. newCollection.MaxRecords = MaxRecords;
  366. newCollection.StartRecord = StartRecord;
  367. newCollection.FilterPredicate = FilterPredicate;
  368. newCollection.Filter = Filter;
  369. newCollection.Relation = Relation;
  370. newCollection.RelationObject = RelationObject;
  371. newCollection.PrefetchPaths = newCollection.PrefetchPaths;
  372. return newCollection;
  373. }
  374. protected TObjectType GetByKey(object key)
  375. {
  376. Populate();
  377. if (_objectMap != null && _objectMap.ContainsKey(key))
  378. return _objectMap[key];
  379. return null;
  380. }
  381. public override int Count
  382. {
  383. get
  384. {
  385. Populate();
  386. return _objectArray.Count;
  387. }
  388. }
  389. public override int CountFast
  390. {
  391. get
  392. {
  393. if (Populated)
  394. return _objectArray.Count;
  395. return GetScalar("*", CSAggregate.Count).Convert<int>();
  396. }
  397. }
  398. public override void Refresh()
  399. {
  400. Populated = false;
  401. _objectArray = null;
  402. _objectMap = null;
  403. #if !WINDOWS_PHONE && !SILVERLIGHT
  404. if (ListChanged != null)
  405. ListChanged(this, new ListChangedEventArgs(ListChangedType.Reset, -1));
  406. #endif
  407. }
  408. public override bool Save()
  409. {
  410. if (!Populated)
  411. return true;
  412. using (CSTransaction csTransaction = new CSTransaction(Schema, IsolationLevel.ReadUncommitted))
  413. {
  414. UpdateForeignKeys();
  415. foreach (TObjectType obj in _objectArray.ToArray())
  416. {
  417. if (obj.IsDirty)
  418. if (!obj.Save())
  419. return false;
  420. }
  421. if (Relation != null && Relation.PureManyToMany)
  422. {
  423. if (_removedObjects != null)
  424. {
  425. foreach (TObjectType obj in _removedObjects)
  426. {
  427. CSParameterCollection parameters = new CSParameterCollection();
  428. parameters.Add("@LocalKey").Value = RelationObject.Data["#" + Relation.LocalKey].Value;
  429. parameters.Add("@ForeignKey").Value = obj.Data["#" + Relation.ForeignKey].Value;
  430. string deleteSql = DB.BuildDeleteSQL(Relation.LinkTable, null, DB.QuoteField(Relation.LocalLinkKey) + "=@LocalKey and " + DB.QuoteField(Relation.ForeignLinkKey) + "=@ForeignKey");
  431. DB.ExecuteNonQuery(deleteSql, parameters);
  432. }
  433. _removedObjects = null;
  434. }
  435. if (_addedObjects != null)
  436. {
  437. foreach (TObjectType obj in _addedObjects)
  438. {
  439. CSParameterCollection parameters = new CSParameterCollection();
  440. parameters.Add("@LocalKey").Value = RelationObject.Data["#" + Relation.LocalKey].Value;
  441. parameters.Add("@ForeignKey").Value = obj.Data["#" + Relation.ForeignKey].Value;
  442. DB.ExecuteInsert(Relation.LinkTable,
  443. new[] { Relation.LocalLinkKey, Relation.ForeignLinkKey },
  444. new[] { "@LocalKey", "@ForeignKey" },
  445. null, null, null, parameters);
  446. // string insertSql =
  447. // DB.BuildInsertSQL(Relation.LinkTable,
  448. // new[] { Relation.LocalLinkKey, Relation.ForeignLinkKey },
  449. // new[] { "@LocalKey", "@ForeignKey" },
  450. // null, null, null);
  451. //DB.ExecuteNonQuery(insertSql, parameters);
  452. }
  453. }
  454. }
  455. csTransaction.Commit();
  456. return true;
  457. }
  458. }
  459. public TObjectType UniqueItem
  460. {
  461. get
  462. {
  463. Populate();
  464. if (Count > 1)
  465. throw new CSException("UniqueItem expects 0 or 1 items in list");
  466. if (Count == 1)
  467. return _objectArray[0];
  468. return null;
  469. }
  470. }
  471. public TObjectType FirstItem
  472. {
  473. get
  474. {
  475. Populate();
  476. return Count == 0 ? null : _objectArray[0];
  477. }
  478. }
  479. public object GetScalar(string fieldName, CSAggregate aggregate)
  480. {
  481. return GetScalar(fieldName, aggregate, null, null);
  482. }
  483. public object GetScalar(string fieldName, string orderBy)
  484. {
  485. return GetScalar(fieldName, orderBy, null, null);
  486. }
  487. public object GetScalar(string fieldName, string orderBy, string filterExpression)
  488. {
  489. return GetScalar(fieldName, orderBy, filterExpression, null);
  490. }
  491. public object GetScalar(string fieldName, string orderBy, string filterExpression, string paramName, object paramValue)
  492. {
  493. return GetScalar(fieldName, orderBy, filterExpression, new CSParameterCollection(paramName, paramValue));
  494. }
  495. public object GetScalar(string fieldName, string orderBy, string filterExpression, CSParameterCollection filterParameters)
  496. {
  497. string tableAlias = CSNameGenerator.NextTableAlias;
  498. CSFilter queryFilter = Filter.And(BuildRelationFilter(tableAlias));
  499. if (!string.IsNullOrEmpty(filterExpression))
  500. {
  501. queryFilter = queryFilter.And(filterExpression, filterParameters);
  502. }
  503. return CSObject<TObjectType>.GetScalar(fieldName, tableAlias, orderBy, queryFilter);
  504. }
  505. public object GetScalar(string fieldName, CSAggregate aggregate, string filterExpression, CSParameterCollection filterParameters)
  506. {
  507. string tableAlias = CSNameGenerator.NextTableAlias;
  508. CSFilter queryFilter = Filter.And(BuildRelationFilter(tableAlias));
  509. if (!string.IsNullOrEmpty(filterExpression))
  510. {
  511. queryFilter = queryFilter.And(filterExpression, filterParameters);
  512. }
  513. return CSObject<TObjectType>.GetScalar(fieldName, tableAlias, aggregate, queryFilter);
  514. }
  515. public object GetScalar(string fieldName, CSAggregate aggregate, string filterExpression)
  516. {
  517. return GetScalar(fieldName, aggregate, filterExpression, null);
  518. }
  519. public object GetScalar(string fieldName, CSAggregate aggregate, string filterExpression, object parameters)
  520. {
  521. return GetScalar(fieldName, aggregate, filterExpression, new CSParameterCollection(parameters));
  522. }
  523. public object GetScalar(string fieldName, CSAggregate aggregate, string filterExpression, string paramName, object paramValue)
  524. {
  525. return GetScalar(fieldName, aggregate, filterExpression, new CSParameterCollection(paramName, paramValue));
  526. }
  527. public bool DeleteAll()
  528. {
  529. Populate();
  530. List<TObjectType> toDeleteList = new List<TObjectType>();
  531. foreach (TObjectType obj in _objectArray)
  532. toDeleteList.Add(obj);
  533. foreach (TObjectType obj in toDeleteList)
  534. if (!obj.Delete())
  535. return false;
  536. return true;
  537. }
  538. public bool DeleteAll(Predicate<TObjectType> predicate)
  539. {
  540. Populate();
  541. List<TObjectType> toDeleteList = new List<TObjectType>();
  542. foreach (TObjectType obj in _objectArray)
  543. if (predicate(obj))
  544. toDeleteList.Add(obj);
  545. foreach (TObjectType obj in toDeleteList)
  546. if (!obj.Delete())
  547. return false;
  548. return true;
  549. }
  550. public TObjectType AddNew()
  551. {
  552. TObjectType obj = CSObject<TObjectType>.New();
  553. Add(obj);
  554. return obj;
  555. }
  556. public void Add(TObjectType obj)
  557. {
  558. Populate();
  559. if (Relation != null && (Relation.RelationType == CSSchemaRelationType.ManyToMany && !Relation.PureManyToMany))
  560. throw new NotSupportedException("CSList.Add() not supported for non-pure Many-To-Many relations");
  561. if (Relation != null && Relation.PureManyToMany)
  562. {
  563. if (_addedObjects == null)
  564. _addedObjects = new List<TObjectType>();
  565. _addedObjects.Add(obj);
  566. }
  567. obj.ObjectDeleted += OnObjectDeleted;
  568. _objectArray.Add(obj);
  569. #if !WINDOWS_PHONE && !SILVERLIGHT
  570. if (ListChanged != null)
  571. ListChanged(this, new ListChangedEventArgs(ListChangedType.ItemAdded, _objectArray.Count - 1));
  572. #endif
  573. }
  574. public void AddRange(IEnumerable<TObjectType> range)
  575. {
  576. foreach (TObjectType obj in range)
  577. Add(obj);
  578. }
  579. public void Remove(TObjectType value)
  580. {
  581. Populate();
  582. int idx = _objectArray.IndexOf(value);
  583. if (idx >= 0)
  584. RemoveAt(idx);
  585. }
  586. private CSDataProvider DB
  587. {
  588. get
  589. {
  590. return Schema.DB;
  591. }
  592. }
  593. public void ForEach(Action<TObjectType> action)
  594. {
  595. Populate();
  596. foreach (TObjectType obj in _objectArray)
  597. action(obj);
  598. }
  599. public TObjectType Find(TObjectType obj)
  600. {
  601. int idx = IndexOf(obj);
  602. return idx >= 0 ? this[idx] : null;
  603. }
  604. public TObjectType Find(Predicate<TObjectType> predicate)
  605. {
  606. Populate();
  607. return _objectArray.FirstOrDefault(o => predicate(o));
  608. }
  609. public bool Contains(Predicate<TObjectType> predicate)
  610. {
  611. return Find(predicate) != null;
  612. }
  613. private void Populate()
  614. {
  615. if (Populated)
  616. return;
  617. if (Relation != null && RelationObject != null && Relation.RelationType == CSSchemaRelationType.OneToMany && RelationObject.IsNew)
  618. {
  619. _objectArray = new List<TObjectType>();
  620. Populated = true;
  621. return;
  622. }
  623. CSTable table = new CSTable(Schema);
  624. //string mainAlias = CSHelper.NextTableAlias;
  625. List<string> columnList = new List<string>(Schema.ColumnsToRead.Count);
  626. List<string> aliasList = new List<string>(Schema.ColumnsToRead.Count);
  627. Dictionary<string, string> aliasMap = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
  628. foreach (string columnName in Schema.ColumnsToRead)
  629. {
  630. string alias = CSNameGenerator.NextFieldAlias;
  631. columnList.Add(table.TableAlias + "." + columnName);
  632. aliasList.Add(alias);
  633. aliasMap.Add(alias, columnName);
  634. }
  635. CSJoinList filterJoins = new CSJoinList();
  636. List<PrefetchField> prefetchFields = CSObject.GetPrefetchFieldsOne(table, columnList, aliasList, filterJoins, PrefetchPaths);
  637. CSFilter whereFilter;
  638. if (PrefetchFilter != null)
  639. {
  640. whereFilter = new CSFilter(DB.QuoteField(table.TableAlias + "." + PrefetchFilter.ForeignKey) + " in (" + PrefetchFilter.InStatement + ")", PrefetchFilter.Parameters);
  641. }
  642. else
  643. {
  644. string parsedFilterExpression = CSExpressionParser.ParseFilter(Filter.Expression, Schema, table.TableAlias, filterJoins);
  645. whereFilter = new CSFilter(parsedFilterExpression, Filter.Parameters);
  646. CSFilter relationFilter = BuildRelationFilter(table.TableAlias);
  647. whereFilter = whereFilter.And(CSExpressionParser.ParseFilter(relationFilter.Expression, Schema, table.TableAlias, filterJoins), relationFilter.Parameters);
  648. }
  649. string parsedOrderBy = CSExpressionParser.ParseOrderBy(OrderBy, Schema, table.TableAlias, filterJoins);
  650. string sqlQuery = DB.BuildSelectSQL(table.TableName, table.TableAlias, columnList.ToArray(), aliasList.ToArray(), filterJoins.BuildJoinExpressions(), whereFilter.Expression, parsedOrderBy, StartRecord, MaxRecords, true, false);
  651. _objectArray = GetObjects(sqlQuery, whereFilter.Parameters, aliasMap, prefetchFields);
  652. if (Schema.KeyColumns.Count == 1)
  653. {
  654. string columnName = Schema.KeyColumns[0].Name;
  655. _objectMap = new Dictionary<object, TObjectType>();
  656. foreach (TObjectType csObject in _objectArray)
  657. _objectMap.Add(csObject.Data["#" + columnName].Value, csObject);
  658. }
  659. foreach (CSSchemaField prefetchField in GetPrefetchFieldsMany())
  660. {
  661. CSRelation relation = prefetchField.Relation;
  662. Dictionary<object, TObjectType> prefetchMap = new Dictionary<object, TObjectType>();
  663. // Creates empty lists in each object of this list
  664. foreach (TObjectType csObject in _objectArray)
  665. {
  666. prefetchMap[csObject.Data["#" + relation.LocalKey].Value] = csObject;
  667. CSList relationCollection = (CSList)Activator.CreateInstance(prefetchField.FieldType);
  668. relationCollection.Relation = relation;
  669. relationCollection.RelationObject = csObject;
  670. relationCollection.InitializePrefetch();
  671. csObject.Data[prefetchField.Name].ValueDirect = relationCollection;
  672. csObject.Data[prefetchField.Name].ValueState = CSFieldValueState.Read;
  673. }
  674. Type objectType = relation.ForeignSchema.ClassType;
  675. CSList csList = (CSList)Activator.CreateInstance(typeof(CSList<>).MakeGenericType(objectType));
  676. //string prefetchTableAlias = CSNameGenerator.NextTableAlias;
  677. List<string> joinsList = new List<string>();
  678. relation.LocalKeys.ForEach(localKey => joinsList.Add(String.Format("{0}.{1}", table.TableAlias, localKey)));
  679. //string prefetchFilter = DB.BuildSelectSQL(table.TableName, table.TableAlias, new[] { table.TableAlias + "." + relation.LocalKey }, new[] { CSNameGenerator.NextFieldAlias }, filterJoins.BuildJoinExpressions(), whereFilter.Expression, parsedOrderBy, StartRecord, MaxRecords, true, true);
  680. string prefetchFilter = DB.BuildSelectSQL(table.TableName, table.TableAlias, joinsList.ToArray(), new[] { CSNameGenerator.NextFieldAlias }, filterJoins.BuildJoinExpressions(), whereFilter.Expression, parsedOrderBy, StartRecord, MaxRecords, true, true);
  681. csList.PrefetchFilter = new PrefetchFilter(relation.ForeignKey, prefetchFilter, whereFilter.Parameters);
  682. if (PrefetchPaths != null && PrefetchPaths.Length > 0)
  683. {
  684. List<string> newPrefetchPaths = new List<string>();
  685. foreach (string path in PrefetchPaths)
  686. {
  687. if (path.StartsWith(prefetchField.Name + "."))
  688. {
  689. newPrefetchPaths.Add(path.Substring(prefetchField.Name.Length + 1));
  690. }
  691. }
  692. if (newPrefetchPaths.Count > 0)
  693. csList.PrefetchPaths = newPrefetchPaths.ToArray();
  694. }
  695. foreach (CSObject csObject in csList)
  696. {
  697. //object localKey = csObject.Data[String.Format("#{0}", relation.ForeignKey)].ValueDirect;
  698. string localKey = "";
  699. relation.ForeignKeys.ForEach(foreignKey =>
  700. {
  701. localKey += Convert.ToString(csObject.Data[String.Format("#{0}", foreignKey)].ValueDirect);
  702. });
  703. CSList relationCollection = (CSList)prefetchMap[localKey].Data[prefetchField.Name].ValueDirect;
  704. relationCollection.AddFromPrefetch(csObject);
  705. }
  706. }
  707. Populated = true;
  708. }
  709. internal override void AddFromPrefetch(CSObject csObject)
  710. {
  711. csObject.Fire_ObjectReading();
  712. ((TObjectType)csObject).ObjectDeleted += OnObjectDeleted;
  713. _objectArray.Add((TObjectType)csObject);
  714. csObject.Fire_ObjectRead();
  715. }
  716. internal override void InitializePrefetch()
  717. {
  718. Populated = true;
  719. _objectArray = new List<TObjectType>();
  720. }
  721. private List<TObjectType> GetObjects(string sqlQuery, CSParameterCollection parameters, Dictionary<string, string> aliasMap, IEnumerable<PrefetchField> prefetchFields)
  722. {
  723. using (CSTransaction csTransaction = new CSTransaction(Schema))
  724. {
  725. List<TObjectType> objectList = new List<TObjectType>();
  726. using (ICSDbReader reader = DB.CreateReader(sqlQuery, parameters))
  727. {
  728. int recs = 0;
  729. bool ok = true;
  730. while (recs == 0 && ok)
  731. {
  732. while (reader.Read())
  733. {
  734. TObjectType csObject = CSObject<TObjectType>.New();
  735. csObject.Fire_ObjectReading();
  736. csObject.FromDataReader(reader, aliasMap);
  737. foreach (PrefetchField prefetchField in prefetchFields)
  738. csObject.ReadRelationToOne(prefetchField.SchemaField, reader, prefetchField.AliasMap);
  739. if (FilterPredicate != null)
  740. {
  741. bool shouldAdd = true;
  742. foreach (Predicate<TObjectType> predicate in FilterPredicate.GetInvocationList())
  743. if (!predicate(csObject))
  744. {
  745. shouldAdd = false;
  746. break;
  747. }
  748. if (!shouldAdd)
  749. continue;
  750. }
  751. csObject.ObjectDeleted += OnObjectDeleted;
  752. objectList.Add(csObject);
  753. csObject.Fire_ObjectRead();
  754. recs++;
  755. }
  756. ok = reader.NextResult();
  757. }
  758. }
  759. csTransaction.Commit();
  760. return objectList;
  761. }
  762. }
  763. internal override void UpdateForeignKeys()
  764. {
  765. if (!Populated || Relation == null)
  766. return;
  767. //2010-12-13 DAE-BER Cambiamos la condición para que no entre e itere si no es necesario.
  768. if (Relation.RelationType == CSSchemaRelationType.OneToMany)
  769. {
  770. foreach (TObjectType obj in _objectArray)
  771. {
  772. //TODO Modificar para Claves Compuestas
  773. //CSFieldValue parentValue = RelationObject.Data["#" + Relation.LocalKey];
  774. //CSFieldValue thisValue = obj.Data["#" + Relation.ForeignKey];
  775. //if (obj.IsNew || thisValue.Value == null || !thisValue.Value.Equals(parentValue.Value))
  776. // if (Relation.RelationType == CSSchemaRelationType.OneToMany)
  777. // thisValue.Value = parentValue.Value;
  778. for (int i = 0; i < Relation.LocalKeys.Count; i++)
  779. {
  780. CSFieldValue parentValue = RelationObject.Data[String.Format("#{0}", Relation.LocalKeys[i])];
  781. CSFieldValue thisValue = obj.Data[String.Format("#{0}", Relation.ForeignKeys[i])];
  782. if (obj.IsNew || thisValue.Value == null || !thisValue.Value.Equals(parentValue.Value))
  783. if (Relation.RelationType == CSSchemaRelationType.OneToMany)
  784. thisValue.Value = parentValue.Value;
  785. }
  786. }
  787. }}
  788. private void OnObjectDeleted(TObjectType sender, EventArgs e)
  789. {
  790. int idx = _objectArray.IndexOf(sender);
  791. if (idx >= 0)
  792. _objectArray.RemoveAt(idx);
  793. }
  794. public TObjectType[] ToArray()
  795. {
  796. Populate();
  797. return _objectArray.ToArray();
  798. }
  799. public T[] ToArray<T>(Converter<TObjectType, T> converter)
  800. {
  801. Populate();
  802. T[] array = new T[Count];
  803. for (int i = 0; i < Count; i++)
  804. {
  805. array[i] = converter(_objectArray[i]);
  806. }
  807. return array;
  808. }
  809. public List<TObjectType> ToList()
  810. {
  811. Populate();
  812. return new List<TObjectType>(_objectArray);
  813. }
  814. public List<T> ToList<T>(Converter<TObjectType, T> converter)
  815. {
  816. Populate();
  817. List<T> array = new List<T>(Count);
  818. for (int i = 0; i < Count; i++)
  819. array.Add(converter(_objectArray[i]));
  820. return array;
  821. }
  822. #region IList Members
  823. public bool IsReadOnly
  824. {
  825. get
  826. {
  827. return false;
  828. }
  829. }
  830. object IList.this[int index]
  831. {
  832. get
  833. {
  834. Populate();
  835. return _objectArray[index];
  836. }
  837. set
  838. {
  839. throw new CSException("Items in CSCollections can not be set");
  840. }
  841. }
  842. public void RemoveAt(int index)
  843. {
  844. Populate();
  845. if (Relation != null && Relation.PureManyToMany)
  846. {
  847. if (_removedObjects == null)
  848. _removedObjects = new List<TObjectType>();
  849. _removedObjects.Add(_objectArray[index]);
  850. }
  851. _objectArray.RemoveAt(index);
  852. #if !WINDOWS_PHONE && !SILVERLIGHT
  853. if (ListChanged != null)
  854. ListChanged(this, new ListChangedEventArgs(ListChangedType.ItemDeleted, index));
  855. #endif
  856. }
  857. public void RemoveAll()
  858. {
  859. Populate();
  860. if (Relation != null && Relation.PureManyToMany)
  861. {
  862. _removedObjects = new List<TObjectType>(_objectArray);
  863. }
  864. _objectArray.Clear();
  865. }
  866. public void RemoveAll(Predicate<TObjectType> predicate)
  867. {
  868. Populate();
  869. if (Relation != null && Relation.PureManyToMany)
  870. {
  871. _removedObjects = new List<TObjectType>();
  872. foreach (TObjectType obj in _objectArray)
  873. if (predicate(obj))
  874. _removedObjects.Add(obj);
  875. foreach (TObjectType obj in _removedObjects)
  876. _objectArray.Remove(obj);
  877. }
  878. else
  879. {
  880. _objectArray.RemoveAll(predicate);
  881. }
  882. }
  883. public void Insert(int index, CSObject value)
  884. {
  885. throw new NotSupportedException("Insert() not supported for CSList");
  886. }
  887. void IList.Insert(int index, object value)
  888. {
  889. throw new NotSupportedException("Insert() not supported for CSList");
  890. }
  891. internal override void Remove(CSObject obj)
  892. {
  893. Remove((TObjectType)obj);
  894. }
  895. void IList.Remove(object value)
  896. {
  897. Remove((TObjectType)value);
  898. }
  899. public bool Contains(TObjectType value)
  900. {
  901. Populate();
  902. return _objectArray.Contains(value);
  903. }
  904. bool IList.Contains(object value)
  905. {
  906. Populate();
  907. return _objectArray.Contains((TObjectType)value);
  908. }
  909. public void Clear()
  910. {
  911. throw new NotSupportedException("Clear() not supported for CSList");
  912. }
  913. int IList.IndexOf(object value)
  914. {
  915. Populate();
  916. return _objectArray.IndexOf((TObjectType)value);
  917. }
  918. /// <summary>
  919. /// Dados dos CSObject de un tipo dado, devuelve si tienen la misma PK
  920. /// </summary>
  921. /// <param name="o1"></param>
  922. /// <param name="o2"></param>
  923. /// <returns></returns>
  924. public bool EqualsByPK(TObjectType o1, TObjectType o2) {
  925. foreach (CSSchemaColumn c in o1.Schema.KeyColumns) {
  926. if (!o1.Data[c.Name].Value.Equals(o2.Data[c.Name].Value))
  927. return false;
  928. }
  929. return true;
  930. }
  931. /// <summary>
  932. /// Devuelve el índice en la lista de un objeto dado en caso de que coincida la PK
  933. /// </summary>
  934. /// <param name="value"></param>
  935. /// <returns></returns>
  936. public int IndexOfByPK(TObjectType value) {
  937. TObjectType r = FindByPK(value);
  938. if (r != null)
  939. return this.IndexOf(r);
  940. else
  941. return -1;
  942. }
  943. /// <summary>
  944. /// Obtiene un objeto de la CSLIst por PK del objeto pasado
  945. /// </summary>
  946. /// <returns></returns>
  947. public TObjectType FindByPK(TObjectType value)
  948. {
  949. Populate();
  950. TObjectType r = this.Find(delegate(TObjectType x)
  951. {
  952. return EqualsByPK(x, value);
  953. });
  954. return r;
  955. }
  956. /// <summary>
  957. ///
  958. /// </summary>
  959. /// <param name="value"></param>
  960. /// <returns></returns>
  961. public int IndexOf(TObjectType value)
  962. {
  963. Populate();
  964. return _objectArray.IndexOf(value);
  965. }
  966. int IList.Add(object value)
  967. {
  968. Populate();
  969. if (value is TObjectType)
  970. Add((TObjectType)value);
  971. else
  972. throw new CSException("Add() only supported for objects of type <" + typeof(TObjectType).Name + ">");
  973. return _objectArray.Count - 1;
  974. }
  975. public bool IsFixedSize
  976. {
  977. get
  978. {
  979. return false;
  980. }
  981. }
  982. #endregion
  983. #region ICollection Members
  984. public bool IsSynchronized
  985. {
  986. get
  987. {
  988. return false;
  989. }
  990. }
  991. public void CopyTo(TObjectType[] array, int index)
  992. {
  993. Populate();
  994. _objectArray.CopyTo(array, index);
  995. }
  996. void ICollection.CopyTo(Array array, int index)
  997. {
  998. Populate();
  999. _objectArray.CopyTo((TObjectType[])array, index);
  1000. }
  1001. public object SyncRoot
  1002. {
  1003. get
  1004. {
  1005. Populate();
  1006. return _objectArray;
  1007. }
  1008. }
  1009. #endregion
  1010. internal Predicate<TObjectType> FilterPredicate
  1011. {
  1012. get { return _filterPredicate; }
  1013. set { _filterPredicate = value; }
  1014. }
  1015. #if !WINDOWS_PHONE && !SILVERLIGHT
  1016. #region ITypedList Members
  1017. public PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors)
  1018. {
  1019. List<PropertyDescriptor> descriptors = new List<PropertyDescriptor>();
  1020. PropertyInfo[] properties = typeof(TObjectType).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
  1021. foreach (PropertyInfo propertyInfo in properties)
  1022. descriptors.Add(new CSFieldDescriptor(typeof(TObjectType), propertyInfo));
  1023. return new PropertyDescriptorCollection(descriptors.ToArray());
  1024. }
  1025. public string GetListName(PropertyDescriptor[] listAccessors)
  1026. {
  1027. return "CSList_" + typeof(TObjectType).Name;
  1028. }
  1029. #endregion
  1030. #region IBindingList Members
  1031. public void AddIndex(PropertyDescriptor property)
  1032. {
  1033. }
  1034. public bool AllowNew
  1035. {
  1036. get
  1037. {
  1038. return true;
  1039. }
  1040. }
  1041. public void ApplySort(PropertyDescriptor property, ListSortDirection direction)
  1042. {
  1043. OrderBy = property.Name;
  1044. if (direction == ListSortDirection.Descending)
  1045. OrderBy += "-";
  1046. Refresh();
  1047. }
  1048. public PropertyDescriptor SortProperty
  1049. {
  1050. get
  1051. {
  1052. string[] arr = OrderBy.Split(' ');
  1053. return arr.Length > 0 ? GetItemProperties(null)[arr[0]] : null;
  1054. }
  1055. }
  1056. public int Find(PropertyDescriptor property, object key)
  1057. {
  1058. throw new NotSupportedException();
  1059. }
  1060. public bool SupportsSorting
  1061. {
  1062. get
  1063. {
  1064. return true;
  1065. }
  1066. }
  1067. public bool IsSorted
  1068. {
  1069. get
  1070. {
  1071. return OrderBy.Length > 0;
  1072. }
  1073. }
  1074. public bool AllowRemove
  1075. {
  1076. get
  1077. {
  1078. return true;
  1079. }
  1080. }
  1081. public bool SupportsSearching
  1082. {
  1083. get
  1084. {
  1085. return false;
  1086. }
  1087. }
  1088. public ListSortDirection SortDirection
  1089. {
  1090. get
  1091. {
  1092. return (OrderBy.ToLower().IndexOf(" desc") > 0) ? ListSortDirection.Descending : ListSortDirection.Ascending;
  1093. }
  1094. }
  1095. public event ListChangedEventHandler ListChanged;
  1096. public bool SupportsChangeNotification
  1097. {
  1098. get
  1099. {
  1100. return true;
  1101. }
  1102. }
  1103. public void RemoveSort()
  1104. {
  1105. throw new NotSupportedException();
  1106. }
  1107. object IBindingList.AddNew()
  1108. {
  1109. return AddNew();
  1110. }
  1111. public bool AllowEdit
  1112. {
  1113. get
  1114. {
  1115. return true;
  1116. }
  1117. }
  1118. public void RemoveIndex(PropertyDescriptor property)
  1119. {
  1120. throw new NotSupportedException();
  1121. }
  1122. #endregion
  1123. #region IListSource Members
  1124. public IList GetList()
  1125. {
  1126. return this;
  1127. }
  1128. public bool ContainsListCollection
  1129. {
  1130. get
  1131. {
  1132. return false;
  1133. }
  1134. }
  1135. #endregion
  1136. #region PropertyDescriptor
  1137. private class CSFieldDescriptor : PropertyDescriptor
  1138. {
  1139. readonly Type _type;
  1140. readonly PropertyInfo _propertyInfo;
  1141. public CSFieldDescriptor(Type type, PropertyInfo propertyInfo)
  1142. : base(propertyInfo.Name, new Attribute[] { })
  1143. {
  1144. _type = type;
  1145. _propertyInfo = propertyInfo;
  1146. }
  1147. public override object GetValue(object component)
  1148. {
  1149. if (!component.GetType().IsSubclassOf(_type))
  1150. return null;
  1151. return _propertyInfo.GetValue(component, null);
  1152. }
  1153. public override void SetValue(object component, object value)
  1154. {
  1155. if (!component.GetType().IsSubclassOf(_type))
  1156. return;
  1157. _propertyInfo.SetValue(component, value, null);
  1158. }
  1159. public override void ResetValue(object component)
  1160. {
  1161. }
  1162. public override bool CanResetValue(object component)
  1163. {
  1164. return false;
  1165. }
  1166. public override Type PropertyType
  1167. {
  1168. get
  1169. {
  1170. return _propertyInfo.PropertyType;
  1171. }
  1172. }
  1173. public override Type ComponentType
  1174. {
  1175. get
  1176. {
  1177. return _type;
  1178. }
  1179. }
  1180. public override bool IsReadOnly
  1181. {
  1182. get
  1183. {
  1184. return !_propertyInfo.CanWrite;
  1185. }
  1186. }
  1187. public override bool ShouldSerializeValue(object component)
  1188. {
  1189. return false;
  1190. }
  1191. }
  1192. #endregion
  1193. #endif
  1194. public event EventHandler Disposed;
  1195. public void Dispose()
  1196. {
  1197. if (_objectArray != null)
  1198. _objectArray.Clear();
  1199. _objectArray = null;
  1200. if (Disposed != null)
  1201. Disposed(this, EventArgs.Empty);
  1202. }
  1203. void IList<TObjectType>.Insert(int index, TObjectType item)
  1204. {
  1205. throw new NotImplementedException();
  1206. }
  1207. bool ICollection<TObjectType>.Remove(TObjectType item)
  1208. {
  1209. Remove(item);
  1210. return true;
  1211. }
  1212. public IEnumerator<TObjectType> GetEnumerator()
  1213. {
  1214. Populate();
  1215. return _objectArray.GetEnumerator();
  1216. }
  1217. // public IEnumerator GetEnumerator()
  1218. // {
  1219. // Populate();
  1220. //
  1221. // return _objectArray.GetEnumerator();
  1222. // }
  1223. protected override IEnumerator GetTypedEnumerator()
  1224. {
  1225. return GetEnumerator();
  1226. }
  1227. }
  1228. [Serializable]
  1229. public class CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9, TKey10> : CSList<TObject> where TObject : CSObject<TObject>
  1230. {
  1231. /// <summary>
  1232. /// TODO Completar documentación
  1233. /// </summary>
  1234. public CSList()
  1235. {
  1236. }
  1237. /// <summary>
  1238. /// TODO Completar documentación
  1239. /// </summary>
  1240. /// <param name="filterExpression"></param>
  1241. public CSList(string filterExpression)
  1242. : base(new CSFilter(filterExpression))
  1243. {
  1244. }
  1245. /// <summary>
  1246. /// TODO Completar documentación
  1247. /// </summary>
  1248. /// <param name="filterExpression"></param>
  1249. /// <param name="paramName"></param>
  1250. /// <param name="paramValue"></param>
  1251. public CSList(string filterExpression, string paramName, object paramValue)
  1252. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  1253. {
  1254. }
  1255. /// <summary>
  1256. /// TODO Completar documentación
  1257. /// </summary>
  1258. /// <param name="filterExpression"></param>
  1259. /// <param name="paramName1"></param>
  1260. /// <param name="paramValue1"></param>
  1261. /// <param name="paramName2"></param>
  1262. /// <param name="paramValue2"></param>
  1263. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  1264. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  1265. {
  1266. }
  1267. /// <summary>
  1268. /// TODO Completar documentación
  1269. /// </summary>
  1270. /// <param name="filterExpression"></param>
  1271. /// <param name="paramName1"></param>
  1272. /// <param name="paramValue1"></param>
  1273. /// <param name="paramName2"></param>
  1274. /// <param name="paramValue2"></param>
  1275. /// <param name="paramName3"></param>
  1276. /// <param name="paramValue3"></param>
  1277. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  1278. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  1279. {
  1280. }
  1281. /// <summary>
  1282. /// TODO Completar documentación
  1283. /// </summary>
  1284. /// <param name="filterExpression"></param>
  1285. /// <param name="parameters"></param>
  1286. public CSList(string filterExpression, CSParameterCollection parameters)
  1287. : base(new CSFilter(filterExpression, parameters))
  1288. {
  1289. }
  1290. /// <summary>
  1291. /// TODO Completar documentación
  1292. /// </summary>
  1293. /// <param name="filterExpression"></param>
  1294. /// <param name="parameters"></param>
  1295. public CSList(string filterExpression, params CSParameter[] parameters)
  1296. : base(new CSFilter(filterExpression, parameters))
  1297. {
  1298. }
  1299. /// <summary>
  1300. /// TODO Completar documentación
  1301. /// </summary>
  1302. /// <param name="filter"></param>
  1303. public CSList(CSFilter filter)
  1304. : base(filter)
  1305. {
  1306. }
  1307. /// <summary>
  1308. /// TODO Completar documentación
  1309. /// </summary>
  1310. /// <param name="sourceCollection"></param>
  1311. public CSList(CSList<TObject> sourceCollection)
  1312. : base(sourceCollection)
  1313. {
  1314. }
  1315. /// <summary>
  1316. /// TODO Completar documentación
  1317. /// </summary>
  1318. /// <param name="key1"></param>
  1319. /// <param name="key2"></param>
  1320. /// <param name="key3"></param>
  1321. /// <param name="key4"></param>
  1322. /// <param name="key5"></param>
  1323. /// <param name="key6"></param>
  1324. /// <param name="key7"></param>
  1325. /// <param name="key8"></param>
  1326. /// <param name="key9"></param>
  1327. /// <param name="key10"></param>
  1328. /// <returns></returns>
  1329. public TObject GetByKey(TKey1 key1, TKey2 key2, TKey3 key3, TKey4 key4, TKey5 key5,
  1330. TKey6 key6, TKey7 key7, TKey8 key8, TKey9 key9, TKey10 key10)
  1331. {
  1332. return base.GetByKey(String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}", key1, key2, key3, key4, key5, key6, key7, key8, key9, key10));
  1333. }
  1334. /// <summary>
  1335. /// TODO Completar documentación
  1336. /// </summary>
  1337. /// <param name="filter"></param>
  1338. /// <returns></returns>
  1339. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9, TKey10> FilteredBy(string filter)
  1340. {
  1341. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9, TKey10>)base.FilteredBy(filter);
  1342. }
  1343. /// <summary>
  1344. /// TODO Completar documentación
  1345. /// </summary>
  1346. /// <param name="filter"></param>
  1347. /// <param name="paramName"></param>
  1348. /// <param name="paramValue"></param>
  1349. /// <returns></returns>
  1350. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9, TKey10> FilteredBy(string filter, string paramName, object paramValue)
  1351. {
  1352. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9, TKey10>)base.FilteredBy(filter, paramName, paramValue);
  1353. }
  1354. /// <summary>
  1355. /// TODO Completar documentación
  1356. /// </summary>
  1357. /// <param name="predicate"></param>
  1358. /// <returns></returns>
  1359. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9, TKey10> FilteredBy(Predicate<TObject> predicate)
  1360. {
  1361. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9, TKey10>)base.FilteredBy(predicate);
  1362. }
  1363. /// <summary>
  1364. /// TODO Completar documentación
  1365. /// </summary>
  1366. /// <param name="orderBy"></param>
  1367. /// <returns></returns>
  1368. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9, TKey10> OrderedBy(string orderBy)
  1369. {
  1370. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9, TKey10>)base.OrderedBy(orderBy);
  1371. }
  1372. }
  1373. /// <summary>
  1374. /// TODO Completar documentación
  1375. /// </summary>
  1376. /// <typeparam name="TObject"></typeparam>
  1377. /// <typeparam name="TKey1"></typeparam>
  1378. /// <typeparam name="TKey2"></typeparam>
  1379. /// <typeparam name="TKey3"></typeparam>
  1380. /// <typeparam name="TKey4"></typeparam>
  1381. /// <typeparam name="TKey5"></typeparam>
  1382. /// <typeparam name="TKey6"></typeparam>
  1383. /// <typeparam name="TKey7"></typeparam>
  1384. /// <typeparam name="TKey8"></typeparam>
  1385. /// <typeparam name="TKey9"></typeparam>
  1386. [Serializable]
  1387. public class CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9> : CSList<TObject> where TObject : CSObject<TObject>
  1388. {
  1389. /// <summary>
  1390. /// TODO Completar documentación
  1391. /// </summary>
  1392. public CSList()
  1393. {
  1394. }
  1395. /// <summary>
  1396. /// TODO Completar documentación
  1397. /// </summary>
  1398. /// <param name="filterExpression"></param>
  1399. public CSList(string filterExpression)
  1400. : base(new CSFilter(filterExpression))
  1401. {
  1402. }
  1403. /// <summary>
  1404. /// TODO Completar documentación
  1405. /// </summary>
  1406. /// <param name="filterExpression"></param>
  1407. /// <param name="paramName"></param>
  1408. /// <param name="paramValue"></param>
  1409. public CSList(string filterExpression, string paramName, object paramValue)
  1410. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  1411. {
  1412. }
  1413. /// <summary>
  1414. /// TODO Completar documentación
  1415. /// </summary>
  1416. /// <param name="filterExpression"></param>
  1417. /// <param name="paramName1"></param>
  1418. /// <param name="paramValue1"></param>
  1419. /// <param name="paramName2"></param>
  1420. /// <param name="paramValue2"></param>
  1421. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  1422. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  1423. {
  1424. }
  1425. /// <summary>
  1426. /// TODO Completar documentación
  1427. /// </summary>
  1428. /// <param name="filterExpression"></param>
  1429. /// <param name="paramName1"></param>
  1430. /// <param name="paramValue1"></param>
  1431. /// <param name="paramName2"></param>
  1432. /// <param name="paramValue2"></param>
  1433. /// <param name="paramName3"></param>
  1434. /// <param name="paramValue3"></param>
  1435. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  1436. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  1437. {
  1438. }
  1439. /// <summary>
  1440. /// TODO Completar documentación
  1441. /// </summary>
  1442. /// <param name="filterExpression"></param>
  1443. /// <param name="parameters"></param>
  1444. public CSList(string filterExpression, CSParameterCollection parameters)
  1445. : base(new CSFilter(filterExpression, parameters))
  1446. {
  1447. }
  1448. /// <summary>
  1449. /// TODO Completar documentación
  1450. /// </summary>
  1451. /// <param name="filterExpression"></param>
  1452. /// <param name="parameters"></param>
  1453. public CSList(string filterExpression, params CSParameter[] parameters)
  1454. : base(new CSFilter(filterExpression, parameters))
  1455. {
  1456. }
  1457. /// <summary>
  1458. /// TODO Completar documentación
  1459. /// </summary>
  1460. /// <param name="filter"></param>
  1461. public CSList(CSFilter filter)
  1462. : base(filter)
  1463. {
  1464. }
  1465. /// <summary>
  1466. /// TODO Completar documentación
  1467. /// </summary>
  1468. /// <param name="sourceCollection"></param>
  1469. public CSList(CSList<TObject> sourceCollection)
  1470. : base(sourceCollection)
  1471. {
  1472. }
  1473. /// <summary>
  1474. /// TODO Completar documentación
  1475. /// </summary>
  1476. /// <param name="key1"></param>
  1477. /// <param name="key2"></param>
  1478. /// <param name="key3"></param>
  1479. /// <param name="key4"></param>
  1480. /// <param name="key5"></param>
  1481. /// <param name="key6"></param>
  1482. /// <param name="key7"></param>
  1483. /// <param name="key8"></param>
  1484. /// <param name="key9"></param>
  1485. /// <returns></returns>
  1486. public TObject GetByKey(TKey1 key1, TKey2 key2, TKey3 key3, TKey4 key4, TKey5 key5,
  1487. TKey6 key6, TKey7 key7, TKey8 key8, TKey9 key9)
  1488. {
  1489. return base.GetByKey(String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}", key1, key2, key3, key4, key5, key6, key7, key8, key9));
  1490. }
  1491. /// <summary>
  1492. /// TODO Completar documentación
  1493. /// </summary>
  1494. /// <param name="filter"></param>
  1495. /// <returns></returns>
  1496. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9> FilteredBy(string filter)
  1497. {
  1498. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9>)base.FilteredBy(filter);
  1499. }
  1500. /// <summary>
  1501. /// TODO Completar documentación
  1502. /// </summary>
  1503. /// <param name="filter"></param>
  1504. /// <param name="paramName"></param>
  1505. /// <param name="paramValue"></param>
  1506. /// <returns></returns>
  1507. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9> FilteredBy(string filter, string paramName, object paramValue)
  1508. {
  1509. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9>)base.FilteredBy(filter, paramName, paramValue);
  1510. }
  1511. /// <summary>
  1512. /// TODO Completar documentación
  1513. /// </summary>
  1514. /// <param name="predicate"></param>
  1515. /// <returns></returns>
  1516. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9> FilteredBy(Predicate<TObject> predicate)
  1517. {
  1518. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9>)base.FilteredBy(predicate);
  1519. }
  1520. /// <summary>
  1521. /// TODO Completar documentación
  1522. /// </summary>
  1523. /// <param name="orderBy"></param>
  1524. /// <returns></returns>
  1525. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9> OrderedBy(string orderBy)
  1526. {
  1527. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8, TKey9>)base.OrderedBy(orderBy);
  1528. }
  1529. }
  1530. /// <summary>
  1531. /// TODO Completar documentación
  1532. /// </summary>
  1533. /// <typeparam name="TObject"></typeparam>
  1534. /// <typeparam name="TKey1"></typeparam>
  1535. /// <typeparam name="TKey2"></typeparam>
  1536. /// <typeparam name="TKey3"></typeparam>
  1537. /// <typeparam name="TKey4"></typeparam>
  1538. /// <typeparam name="TKey5"></typeparam>
  1539. /// <typeparam name="TKey6"></typeparam>
  1540. /// <typeparam name="TKey7"></typeparam>
  1541. /// <typeparam name="TKey8"></typeparam>
  1542. [Serializable]
  1543. public class CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8> : CSList<TObject> where TObject : CSObject<TObject>
  1544. {
  1545. /// <summary>
  1546. /// TODO Completar documentación
  1547. /// </summary>
  1548. public CSList()
  1549. {
  1550. }
  1551. /// <summary>
  1552. /// TODO Completar documentación
  1553. /// </summary>
  1554. /// <param name="filterExpression"></param>
  1555. public CSList(string filterExpression)
  1556. : base(new CSFilter(filterExpression))
  1557. {
  1558. }
  1559. /// <summary>
  1560. /// TODO Completar documentación
  1561. /// </summary>
  1562. /// <param name="filterExpression"></param>
  1563. /// <param name="paramName"></param>
  1564. /// <param name="paramValue"></param>
  1565. public CSList(string filterExpression, string paramName, object paramValue)
  1566. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  1567. {
  1568. }
  1569. /// <summary>
  1570. /// TODO Completar documentación
  1571. /// </summary>
  1572. /// <param name="filterExpression"></param>
  1573. /// <param name="paramName1"></param>
  1574. /// <param name="paramValue1"></param>
  1575. /// <param name="paramName2"></param>
  1576. /// <param name="paramValue2"></param>
  1577. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  1578. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  1579. {
  1580. }
  1581. /// <summary>
  1582. /// TODO Completar documentación
  1583. /// </summary>
  1584. /// <param name="filterExpression"></param>
  1585. /// <param name="paramName1"></param>
  1586. /// <param name="paramValue1"></param>
  1587. /// <param name="paramName2"></param>
  1588. /// <param name="paramValue2"></param>
  1589. /// <param name="paramName3"></param>
  1590. /// <param name="paramValue3"></param>
  1591. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  1592. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  1593. {
  1594. }
  1595. /// <summary>
  1596. /// TODO Completar documentación
  1597. /// </summary>
  1598. /// <param name="filterExpression"></param>
  1599. /// <param name="parameters"></param>
  1600. public CSList(string filterExpression, CSParameterCollection parameters)
  1601. : base(new CSFilter(filterExpression, parameters))
  1602. {
  1603. }
  1604. /// <summary>
  1605. /// TODO Completar documentación
  1606. /// </summary>
  1607. /// <param name="filterExpression"></param>
  1608. /// <param name="parameters"></param>
  1609. public CSList(string filterExpression, params CSParameter[] parameters)
  1610. : base(new CSFilter(filterExpression, parameters))
  1611. {
  1612. }
  1613. /// <summary>
  1614. /// TODO Completar documentación
  1615. /// </summary>
  1616. /// <param name="filter"></param>
  1617. public CSList(CSFilter filter)
  1618. : base(filter)
  1619. {
  1620. }
  1621. /// <summary>
  1622. /// TODO Completar documentación
  1623. /// </summary>
  1624. /// <param name="sourceCollection"></param>
  1625. public CSList(CSList<TObject> sourceCollection)
  1626. : base(sourceCollection)
  1627. {
  1628. }
  1629. /// <summary>
  1630. /// TODO Completar documentación
  1631. /// </summary>
  1632. /// <param name="key1"></param>
  1633. /// <param name="key2"></param>
  1634. /// <param name="key3"></param>
  1635. /// <param name="key4"></param>
  1636. /// <param name="key5"></param>
  1637. /// <param name="key6"></param>
  1638. /// <param name="key7"></param>
  1639. /// <param name="key8"></param>
  1640. /// <returns></returns>
  1641. public TObject GetByKey(TKey1 key1, TKey2 key2, TKey3 key3, TKey4 key4, TKey5 key5,
  1642. TKey6 key6, TKey7 key7, TKey8 key8)
  1643. {
  1644. return base.GetByKey(String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}", key1, key2, key3, key4, key5, key6, key7, key8));
  1645. }
  1646. /// <summary>
  1647. /// TODO Completar documentación
  1648. /// </summary>
  1649. /// <param name="filter"></param>
  1650. /// <returns></returns>
  1651. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8> FilteredBy(string filter)
  1652. {
  1653. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8>)base.FilteredBy(filter);
  1654. }
  1655. /// <summary>
  1656. /// TODO Completar documentación
  1657. /// </summary>
  1658. /// <param name="filter"></param>
  1659. /// <param name="paramName"></param>
  1660. /// <param name="paramValue"></param>
  1661. /// <returns></returns>
  1662. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8> FilteredBy(string filter, string paramName, object paramValue)
  1663. {
  1664. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8>)base.FilteredBy(filter, paramName, paramValue);
  1665. }
  1666. /// <summary>
  1667. /// TODO Completar documentación
  1668. /// </summary>
  1669. /// <param name="predicate"></param>
  1670. /// <returns></returns>
  1671. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8> FilteredBy(Predicate<TObject> predicate)
  1672. {
  1673. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8>)base.FilteredBy(predicate);
  1674. }
  1675. /// <summary>
  1676. /// TODO Completar documentación
  1677. /// </summary>
  1678. /// <param name="orderBy"></param>
  1679. /// <returns></returns>
  1680. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8> OrderedBy(string orderBy)
  1681. {
  1682. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7, TKey8>)base.OrderedBy(orderBy);
  1683. }
  1684. }
  1685. /// <summary>
  1686. /// TODO Completar documentación
  1687. /// </summary>
  1688. /// <typeparam name="TObject"></typeparam>
  1689. /// <typeparam name="TKey1"></typeparam>
  1690. /// <typeparam name="TKey2"></typeparam>
  1691. /// <typeparam name="TKey3"></typeparam>
  1692. /// <typeparam name="TKey4"></typeparam>
  1693. /// <typeparam name="TKey5"></typeparam>
  1694. /// <typeparam name="TKey6"></typeparam>
  1695. /// <typeparam name="TKey7"></typeparam>
  1696. [Serializable]
  1697. public class CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7> : CSList<TObject> where TObject : CSObject<TObject>
  1698. {
  1699. /// <summary>
  1700. /// TODO Completar documentación
  1701. /// </summary>
  1702. public CSList()
  1703. {
  1704. }
  1705. /// <summary>
  1706. /// TODO Completar documentación
  1707. /// </summary>
  1708. /// <param name="filterExpression"></param>
  1709. public CSList(string filterExpression)
  1710. : base(new CSFilter(filterExpression))
  1711. {
  1712. }
  1713. /// <summary>
  1714. /// TODO Completar documentación
  1715. /// </summary>
  1716. /// <param name="filterExpression"></param>
  1717. /// <param name="paramName"></param>
  1718. /// <param name="paramValue"></param>
  1719. public CSList(string filterExpression, string paramName, object paramValue)
  1720. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  1721. {
  1722. }
  1723. /// <summary>
  1724. /// TODO Completar documentación
  1725. /// </summary>
  1726. /// <param name="filterExpression"></param>
  1727. /// <param name="paramName1"></param>
  1728. /// <param name="paramValue1"></param>
  1729. /// <param name="paramName2"></param>
  1730. /// <param name="paramValue2"></param>
  1731. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  1732. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  1733. {
  1734. }
  1735. /// <summary>
  1736. /// TODO Completar documentación
  1737. /// </summary>
  1738. /// <param name="filterExpression"></param>
  1739. /// <param name="paramName1"></param>
  1740. /// <param name="paramValue1"></param>
  1741. /// <param name="paramName2"></param>
  1742. /// <param name="paramValue2"></param>
  1743. /// <param name="paramName3"></param>
  1744. /// <param name="paramValue3"></param>
  1745. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  1746. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  1747. {
  1748. }
  1749. /// <summary>
  1750. /// TODO Completar documentación
  1751. /// </summary>
  1752. /// <param name="filterExpression"></param>
  1753. /// <param name="parameters"></param>
  1754. public CSList(string filterExpression, CSParameterCollection parameters)
  1755. : base(new CSFilter(filterExpression, parameters))
  1756. {
  1757. }
  1758. /// <summary>
  1759. /// TODO Completar documentación
  1760. /// </summary>
  1761. /// <param name="filterExpression"></param>
  1762. /// <param name="parameters"></param>
  1763. public CSList(string filterExpression, params CSParameter[] parameters)
  1764. : base(new CSFilter(filterExpression, parameters))
  1765. {
  1766. }
  1767. /// <summary>
  1768. /// TODO Completar documentación
  1769. /// </summary>
  1770. /// <param name="filter"></param>
  1771. public CSList(CSFilter filter)
  1772. : base(filter)
  1773. {
  1774. }
  1775. /// <summary>
  1776. /// TODO Completar documentación
  1777. /// </summary>
  1778. /// <param name="sourceCollection"></param>
  1779. public CSList(CSList<TObject> sourceCollection)
  1780. : base(sourceCollection)
  1781. {
  1782. }
  1783. /// <summary>
  1784. /// TODO Completar documentación
  1785. /// </summary>
  1786. /// <param name="key1"></param>
  1787. /// <param name="key2"></param>
  1788. /// <param name="key3"></param>
  1789. /// <param name="key4"></param>
  1790. /// <param name="key5"></param>
  1791. /// <param name="key6"></param>
  1792. /// <param name="key7"></param>
  1793. /// <returns></returns>
  1794. public TObject GetByKey(TKey1 key1, TKey2 key2, TKey3 key3, TKey4 key4, TKey5 key5, TKey6 key6, TKey7 key7)
  1795. {
  1796. return base.GetByKey(String.Format("{0}{1}{2}{3}{4}{5}{6}{7}", key1, key2, key3, key4, key5, key6, key7));
  1797. }
  1798. /// <summary>
  1799. /// TODO Completar documentación
  1800. /// </summary>
  1801. /// <param name="filter"></param>
  1802. /// <returns></returns>
  1803. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7> FilteredBy(string filter)
  1804. {
  1805. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7>)base.FilteredBy(filter);
  1806. }
  1807. /// <summary>
  1808. /// TODO Completar documentación
  1809. /// </summary>
  1810. /// <param name="filter"></param>
  1811. /// <param name="paramName"></param>
  1812. /// <param name="paramValue"></param>
  1813. /// <returns></returns>
  1814. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7> FilteredBy(string filter, string paramName, object paramValue)
  1815. {
  1816. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7>)base.FilteredBy(filter, paramName, paramValue);
  1817. }
  1818. /// <summary>
  1819. /// TODO Completar documentación
  1820. /// </summary>
  1821. /// <param name="predicate"></param>
  1822. /// <returns></returns>
  1823. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7> FilteredBy(Predicate<TObject> predicate)
  1824. {
  1825. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7>)base.FilteredBy(predicate);
  1826. }
  1827. /// <summary>
  1828. /// TODO Completar documentación
  1829. /// </summary>
  1830. /// <param name="orderBy"></param>
  1831. /// <returns></returns>
  1832. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7> OrderedBy(string orderBy)
  1833. {
  1834. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6, TKey7>)base.OrderedBy(orderBy);
  1835. }
  1836. }
  1837. /// <summary>
  1838. /// TODO Completar documentación
  1839. /// </summary>
  1840. /// <typeparam name="TObject"></typeparam>
  1841. /// <typeparam name="TKey1"></typeparam>
  1842. /// <typeparam name="TKey2"></typeparam>
  1843. /// <typeparam name="TKey3"></typeparam>
  1844. /// <typeparam name="TKey4"></typeparam>
  1845. /// <typeparam name="TKey5"></typeparam>
  1846. /// <typeparam name="TKey6"></typeparam>
  1847. [Serializable]
  1848. public class CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6> : CSList<TObject> where TObject : CSObject<TObject>
  1849. {
  1850. /// <summary>
  1851. /// TODO Completar documentación
  1852. /// </summary>
  1853. public CSList()
  1854. {
  1855. }
  1856. /// <summary>
  1857. /// TODO Completar documentación
  1858. /// </summary>
  1859. /// <param name="filterExpression"></param>
  1860. public CSList(string filterExpression)
  1861. : base(new CSFilter(filterExpression))
  1862. {
  1863. }
  1864. /// <summary>
  1865. /// TODO Completar documentación
  1866. /// </summary>
  1867. /// <param name="filterExpression"></param>
  1868. /// <param name="paramName"></param>
  1869. /// <param name="paramValue"></param>
  1870. public CSList(string filterExpression, string paramName, object paramValue)
  1871. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  1872. {
  1873. }
  1874. /// <summary>
  1875. /// TODO Completar documentación
  1876. /// </summary>
  1877. /// <param name="filterExpression"></param>
  1878. /// <param name="paramName1"></param>
  1879. /// <param name="paramValue1"></param>
  1880. /// <param name="paramName2"></param>
  1881. /// <param name="paramValue2"></param>
  1882. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  1883. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  1884. {
  1885. }
  1886. /// <summary>
  1887. /// TODO Completar documentación
  1888. /// </summary>
  1889. /// <param name="filterExpression"></param>
  1890. /// <param name="paramName1"></param>
  1891. /// <param name="paramValue1"></param>
  1892. /// <param name="paramName2"></param>
  1893. /// <param name="paramValue2"></param>
  1894. /// <param name="paramName3"></param>
  1895. /// <param name="paramValue3"></param>
  1896. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  1897. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  1898. {
  1899. }
  1900. /// <summary>
  1901. /// TODO Completar documentación
  1902. /// </summary>
  1903. /// <param name="filterExpression"></param>
  1904. /// <param name="parameters"></param>
  1905. public CSList(string filterExpression, CSParameterCollection parameters)
  1906. : base(new CSFilter(filterExpression, parameters))
  1907. {
  1908. }
  1909. /// <summary>
  1910. /// TODO Completar documentación
  1911. /// </summary>
  1912. /// <param name="filterExpression"></param>
  1913. /// <param name="parameters"></param>
  1914. public CSList(string filterExpression, params CSParameter[] parameters)
  1915. : base(new CSFilter(filterExpression, parameters))
  1916. {
  1917. }
  1918. /// <summary>
  1919. /// TODO Completar documentación
  1920. /// </summary>
  1921. /// <param name="filter"></param>
  1922. public CSList(CSFilter filter)
  1923. : base(filter)
  1924. {
  1925. }
  1926. /// <summary>
  1927. /// TODO Completar documentación
  1928. /// </summary>
  1929. /// <param name="sourceCollection"></param>
  1930. public CSList(CSList<TObject> sourceCollection)
  1931. : base(sourceCollection)
  1932. {
  1933. }
  1934. /// <summary>
  1935. /// TODO Completar documentación
  1936. /// </summary>
  1937. /// <param name="key1"></param>
  1938. /// <param name="key2"></param>
  1939. /// <param name="key3"></param>
  1940. /// <param name="key4"></param>
  1941. /// <param name="key5"></param>
  1942. /// <param name="key6"></param>
  1943. /// <returns></returns>
  1944. public TObject GetByKey(TKey1 key1, TKey2 key2, TKey3 key3, TKey4 key4, TKey5 key5, TKey6 key6)
  1945. {
  1946. return base.GetByKey(String.Format("{0}{1}{2}{3}{4}{5}{6}", key1, key2, key3, key4, key5, key6));
  1947. }
  1948. /// <summary>
  1949. /// TODO Completar documentación
  1950. /// </summary>
  1951. /// <param name="filter"></param>
  1952. /// <returns></returns>
  1953. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6> FilteredBy(string filter)
  1954. {
  1955. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6>)base.FilteredBy(filter);
  1956. }
  1957. /// <summary>
  1958. /// TODO Completar documentación
  1959. /// </summary>
  1960. /// <param name="filter"></param>
  1961. /// <param name="paramName"></param>
  1962. /// <param name="paramValue"></param>
  1963. /// <returns></returns>
  1964. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6> FilteredBy(string filter, string paramName, object paramValue)
  1965. {
  1966. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6>)base.FilteredBy(filter, paramName, paramValue);
  1967. }
  1968. /// <summary>
  1969. /// TODO Completar documentación
  1970. /// </summary>
  1971. /// <param name="predicate"></param>
  1972. /// <returns></returns>
  1973. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6> FilteredBy(Predicate<TObject> predicate)
  1974. {
  1975. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6>)base.FilteredBy(predicate);
  1976. }
  1977. /// <summary>
  1978. /// TODO Completar documentación
  1979. /// </summary>
  1980. /// <param name="orderBy"></param>
  1981. /// <returns></returns>
  1982. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6> OrderedBy(string orderBy)
  1983. {
  1984. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5, TKey6>)base.OrderedBy(orderBy);
  1985. }
  1986. }
  1987. /// <summary>
  1988. /// TODO Completar documentación
  1989. /// </summary>
  1990. /// <typeparam name="TObject"></typeparam>
  1991. /// <typeparam name="TKey1"></typeparam>
  1992. /// <typeparam name="TKey2"></typeparam>
  1993. /// <typeparam name="TKey3"></typeparam>
  1994. /// <typeparam name="TKey4"></typeparam>
  1995. /// <typeparam name="TKey5"></typeparam>
  1996. [Serializable]
  1997. public class CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5> : CSList<TObject> where TObject : CSObject<TObject>
  1998. {
  1999. /// <summary>
  2000. /// TODO Completar documentación
  2001. /// </summary>
  2002. public CSList()
  2003. {
  2004. }
  2005. /// <summary>
  2006. /// TODO Completar documentación
  2007. /// </summary>
  2008. /// <param name="filterExpression"></param>
  2009. public CSList(string filterExpression)
  2010. : base(new CSFilter(filterExpression))
  2011. {
  2012. }
  2013. /// <summary>
  2014. /// TODO Completar documentación
  2015. /// </summary>
  2016. /// <param name="filterExpression"></param>
  2017. /// <param name="paramName"></param>
  2018. /// <param name="paramValue"></param>
  2019. public CSList(string filterExpression, string paramName, object paramValue)
  2020. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  2021. {
  2022. }
  2023. /// <summary>
  2024. /// TODO Completar documentación
  2025. /// </summary>
  2026. /// <param name="filterExpression"></param>
  2027. /// <param name="paramName1"></param>
  2028. /// <param name="paramValue1"></param>
  2029. /// <param name="paramName2"></param>
  2030. /// <param name="paramValue2"></param>
  2031. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  2032. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  2033. {
  2034. }
  2035. /// <summary>
  2036. /// TODO Completar documentación
  2037. /// </summary>
  2038. /// <param name="filterExpression"></param>
  2039. /// <param name="paramName1"></param>
  2040. /// <param name="paramValue1"></param>
  2041. /// <param name="paramName2"></param>
  2042. /// <param name="paramValue2"></param>
  2043. /// <param name="paramName3"></param>
  2044. /// <param name="paramValue3"></param>
  2045. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  2046. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  2047. {
  2048. }
  2049. /// <summary>
  2050. /// TODO Completar documentación
  2051. /// </summary>
  2052. /// <param name="filterExpression"></param>
  2053. /// <param name="parameters"></param>
  2054. public CSList(string filterExpression, CSParameterCollection parameters)
  2055. : base(new CSFilter(filterExpression, parameters))
  2056. {
  2057. }
  2058. /// <summary>
  2059. /// TODO Completar documentación
  2060. /// </summary>
  2061. /// <param name="filterExpression"></param>
  2062. /// <param name="parameters"></param>
  2063. public CSList(string filterExpression, params CSParameter[] parameters)
  2064. : base(new CSFilter(filterExpression, parameters))
  2065. {
  2066. }
  2067. /// <summary>
  2068. /// TODO Completar documentación
  2069. /// </summary>
  2070. /// <param name="filter"></param>
  2071. public CSList(CSFilter filter)
  2072. : base(filter)
  2073. {
  2074. }
  2075. /// <summary>
  2076. /// TODO Completar documentación
  2077. /// </summary>
  2078. /// <param name="sourceCollection"></param>
  2079. public CSList(CSList<TObject> sourceCollection)
  2080. : base(sourceCollection)
  2081. {
  2082. }
  2083. /// <summary>
  2084. /// TODO Completar documentación
  2085. /// </summary>
  2086. /// <param name="key1"></param>
  2087. /// <param name="key2"></param>
  2088. /// <param name="key3"></param>
  2089. /// <param name="key4"></param>
  2090. /// <param name="key5"></param>
  2091. /// <returns></returns>
  2092. public TObject GetByKey(TKey1 key1, TKey2 key2, TKey3 key3, TKey4 key4, TKey5 key5)
  2093. {
  2094. return base.GetByKey(String.Format("{0}{1}{2}{3}{4}{5}", key1, key2, key3, key4, key5));
  2095. }
  2096. /// <summary>
  2097. /// TODO Completar documentación
  2098. /// </summary>
  2099. /// <param name="filter"></param>
  2100. /// <returns></returns>
  2101. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5> FilteredBy(string filter)
  2102. {
  2103. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5>)base.FilteredBy(filter);
  2104. }
  2105. /// <summary>
  2106. /// TODO Completar documentación
  2107. /// </summary>
  2108. /// <param name="filter"></param>
  2109. /// <param name="paramName"></param>
  2110. /// <param name="paramValue"></param>
  2111. /// <returns></returns>
  2112. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5> FilteredBy(string filter, string paramName, object paramValue)
  2113. {
  2114. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5>)base.FilteredBy(filter, paramName, paramValue);
  2115. }
  2116. /// <summary>
  2117. /// TODO Completar documentación
  2118. /// </summary>
  2119. /// <param name="predicate"></param>
  2120. /// <returns></returns>
  2121. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5> FilteredBy(Predicate<TObject> predicate)
  2122. {
  2123. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5>)base.FilteredBy(predicate);
  2124. }
  2125. /// <summary>
  2126. /// TODO Completar documentación
  2127. /// </summary>
  2128. /// <param name="orderBy"></param>
  2129. /// <returns></returns>
  2130. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5> OrderedBy(string orderBy)
  2131. {
  2132. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4, TKey5>)base.OrderedBy(orderBy);
  2133. }
  2134. }
  2135. /// <summary>
  2136. /// TODO Completar documentación
  2137. /// </summary>
  2138. /// <typeparam name="TObject"></typeparam>
  2139. /// <typeparam name="TKey1"></typeparam>
  2140. /// <typeparam name="TKey2"></typeparam>
  2141. /// <typeparam name="TKey3"></typeparam>
  2142. /// <typeparam name="TKey4"></typeparam>
  2143. [Serializable]
  2144. public class CSList<TObject, TKey1, TKey2, TKey3, TKey4> : CSList<TObject> where TObject : CSObject<TObject>
  2145. {
  2146. /// <summary>
  2147. /// TODO Completar documentación
  2148. /// </summary>
  2149. public CSList()
  2150. {
  2151. }
  2152. /// <summary>
  2153. /// TODO Completar documentación
  2154. /// </summary>
  2155. /// <param name="filterExpression"></param>
  2156. public CSList(string filterExpression)
  2157. : base(new CSFilter(filterExpression))
  2158. {
  2159. }
  2160. /// <summary>
  2161. /// TODO Completar documentación
  2162. /// </summary>
  2163. /// <param name="filterExpression"></param>
  2164. /// <param name="paramName"></param>
  2165. /// <param name="paramValue"></param>
  2166. public CSList(string filterExpression, string paramName, object paramValue)
  2167. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  2168. {
  2169. }
  2170. /// <summary>
  2171. /// TODO Completar documentación
  2172. /// </summary>
  2173. /// <param name="filterExpression"></param>
  2174. /// <param name="paramName1"></param>
  2175. /// <param name="paramValue1"></param>
  2176. /// <param name="paramName2"></param>
  2177. /// <param name="paramValue2"></param>
  2178. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  2179. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  2180. {
  2181. }
  2182. /// <summary>
  2183. /// TODO Completar documentación
  2184. /// </summary>
  2185. /// <param name="filterExpression"></param>
  2186. /// <param name="paramName1"></param>
  2187. /// <param name="paramValue1"></param>
  2188. /// <param name="paramName2"></param>
  2189. /// <param name="paramValue2"></param>
  2190. /// <param name="paramName3"></param>
  2191. /// <param name="paramValue3"></param>
  2192. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  2193. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  2194. {
  2195. }
  2196. /// <summary>
  2197. /// TODO Completar documentación
  2198. /// </summary>
  2199. /// <param name="filterExpression"></param>
  2200. /// <param name="parameters"></param>
  2201. public CSList(string filterExpression, CSParameterCollection parameters)
  2202. : base(new CSFilter(filterExpression, parameters))
  2203. {
  2204. }
  2205. /// <summary>
  2206. /// TODO Completar documentación
  2207. /// </summary>
  2208. /// <param name="filterExpression"></param>
  2209. /// <param name="parameters"></param>
  2210. public CSList(string filterExpression, params CSParameter[] parameters)
  2211. : base(new CSFilter(filterExpression, parameters))
  2212. {
  2213. }
  2214. /// <summary>
  2215. /// TODO Completar documentación
  2216. /// </summary>
  2217. /// <param name="filter"></param>
  2218. public CSList(CSFilter filter)
  2219. : base(filter)
  2220. {
  2221. }
  2222. /// <summary>
  2223. /// TODO Completar documentación
  2224. /// </summary>
  2225. /// <param name="sourceCollection"></param>
  2226. public CSList(CSList<TObject> sourceCollection)
  2227. : base(sourceCollection)
  2228. {
  2229. }
  2230. /// <summary>
  2231. /// TODO Completar documentación
  2232. /// </summary>
  2233. /// <param name="key1"></param>
  2234. /// <param name="key2"></param>
  2235. /// <param name="key3"></param>
  2236. /// <param name="key4"></param>
  2237. /// <returns></returns>
  2238. public TObject GetByKey(TKey1 key1, TKey2 key2, TKey3 key3, TKey4 key4)
  2239. {
  2240. return base.GetByKey(String.Format("{0}{1}{2}{3}{4}", key1, key2, key3, key4));
  2241. }
  2242. /// <summary>
  2243. /// TODO Completar documentación
  2244. /// </summary>
  2245. /// <param name="filter"></param>
  2246. /// <returns></returns>
  2247. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4> FilteredBy(string filter)
  2248. {
  2249. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4>)base.FilteredBy(filter);
  2250. }
  2251. /// <summary>
  2252. /// TODO Completar documentación
  2253. /// </summary>
  2254. /// <param name="filter"></param>
  2255. /// <param name="paramName"></param>
  2256. /// <param name="paramValue"></param>
  2257. /// <returns></returns>
  2258. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4> FilteredBy(string filter, string paramName, object paramValue)
  2259. {
  2260. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4>)base.FilteredBy(filter, paramName, paramValue);
  2261. }
  2262. /// <summary>
  2263. /// TODO Completar documentación
  2264. /// </summary>
  2265. /// <param name="predicate"></param>
  2266. /// <returns></returns>
  2267. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4> FilteredBy(Predicate<TObject> predicate)
  2268. {
  2269. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4>)base.FilteredBy(predicate);
  2270. }
  2271. /// <summary>
  2272. /// TODO Completar documentación
  2273. /// </summary>
  2274. /// <param name="orderBy"></param>
  2275. /// <returns></returns>
  2276. public new CSList<TObject, TKey1, TKey2, TKey3, TKey4> OrderedBy(string orderBy)
  2277. {
  2278. return (CSList<TObject, TKey1, TKey2, TKey3, TKey4>)base.OrderedBy(orderBy);
  2279. }
  2280. }
  2281. /// <summary>
  2282. /// TODO Completar documentación
  2283. /// </summary>
  2284. /// <typeparam name="TObject"></typeparam>
  2285. /// <typeparam name="TKey1"></typeparam>
  2286. /// <typeparam name="TKey2"></typeparam>
  2287. /// <typeparam name="TKey3"></typeparam>
  2288. [Serializable]
  2289. public class CSList<TObject, TKey1, TKey2, TKey3> : CSList<TObject> where TObject : CSObject<TObject>
  2290. {
  2291. /// <summary>
  2292. /// TODO Completar documentación
  2293. /// </summary>
  2294. public CSList()
  2295. {
  2296. }
  2297. /// <summary>
  2298. /// TODO Completar documentación
  2299. /// </summary>
  2300. /// <param name="filterExpression"></param>
  2301. public CSList(string filterExpression)
  2302. : base(new CSFilter(filterExpression))
  2303. {
  2304. }
  2305. /// <summary>
  2306. /// TODO Completar documentación
  2307. /// </summary>
  2308. /// <param name="filterExpression"></param>
  2309. /// <param name="paramName"></param>
  2310. /// <param name="paramValue"></param>
  2311. public CSList(string filterExpression, string paramName, object paramValue)
  2312. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  2313. {
  2314. }
  2315. /// <summary>
  2316. /// TODO Completar documentación
  2317. /// </summary>
  2318. /// <param name="filterExpression"></param>
  2319. /// <param name="paramName1"></param>
  2320. /// <param name="paramValue1"></param>
  2321. /// <param name="paramName2"></param>
  2322. /// <param name="paramValue2"></param>
  2323. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  2324. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  2325. {
  2326. }
  2327. /// <summary>
  2328. /// TODO Completar documentación
  2329. /// </summary>
  2330. /// <param name="filterExpression"></param>
  2331. /// <param name="paramName1"></param>
  2332. /// <param name="paramValue1"></param>
  2333. /// <param name="paramName2"></param>
  2334. /// <param name="paramValue2"></param>
  2335. /// <param name="paramName3"></param>
  2336. /// <param name="paramValue3"></param>
  2337. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  2338. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  2339. {
  2340. }
  2341. /// <summary>
  2342. /// TODO Completar documentación
  2343. /// </summary>
  2344. /// <param name="filterExpression"></param>
  2345. /// <param name="parameters"></param>
  2346. public CSList(string filterExpression, CSParameterCollection parameters)
  2347. : base(new CSFilter(filterExpression, parameters))
  2348. {
  2349. }
  2350. /// <summary>
  2351. /// TODO Completar documentación
  2352. /// </summary>
  2353. /// <param name="filterExpression"></param>
  2354. /// <param name="parameters"></param>
  2355. public CSList(string filterExpression, params CSParameter[] parameters)
  2356. : base(new CSFilter(filterExpression, parameters))
  2357. {
  2358. }
  2359. /// <summary>
  2360. /// TODO Completar documentación
  2361. /// </summary>
  2362. /// <param name="filter"></param>
  2363. public CSList(CSFilter filter)
  2364. : base(filter)
  2365. {
  2366. }
  2367. /// <summary>
  2368. /// TODO Completar documentación
  2369. /// </summary>
  2370. /// <param name="sourceCollection"></param>
  2371. public CSList(CSList<TObject> sourceCollection)
  2372. : base(sourceCollection)
  2373. {
  2374. }
  2375. /// <summary>
  2376. /// TODO Completar documentación
  2377. /// </summary>
  2378. /// <param name="key1"></param>
  2379. /// <param name="key2"></param>
  2380. /// <param name="key3"></param>
  2381. /// <returns></returns>
  2382. public TObject GetByKey(TKey1 key1, TKey2 key2, TKey3 key3)
  2383. {
  2384. return base.GetByKey(String.Format("{0}{1}{2}{3}", key1, key2, key3));
  2385. }
  2386. /// <summary>
  2387. /// TODO Completar documentación
  2388. /// </summary>
  2389. /// <param name="filter"></param>
  2390. /// <returns></returns>
  2391. public new CSList<TObject, TKey1, TKey2, TKey3> FilteredBy(string filter)
  2392. {
  2393. return (CSList<TObject, TKey1, TKey2, TKey3>)base.FilteredBy(filter);
  2394. }
  2395. /// <summary>
  2396. /// TODO Completar documentación
  2397. /// </summary>
  2398. /// <param name="filter"></param>
  2399. /// <param name="paramName"></param>
  2400. /// <param name="paramValue"></param>
  2401. /// <returns></returns>
  2402. public new CSList<TObject, TKey1, TKey2, TKey3> FilteredBy(string filter, string paramName, object paramValue)
  2403. {
  2404. return (CSList<TObject, TKey1, TKey2, TKey3>)base.FilteredBy(filter, paramName, paramValue);
  2405. }
  2406. /// <summary>
  2407. /// TODO Completar documentación
  2408. /// </summary>
  2409. /// <param name="predicate"></param>
  2410. /// <returns></returns>
  2411. public new CSList<TObject, TKey1, TKey2, TKey3> FilteredBy(Predicate<TObject> predicate)
  2412. {
  2413. return (CSList<TObject, TKey1, TKey2, TKey3>)base.FilteredBy(predicate);
  2414. }
  2415. /// <summary>
  2416. /// TODO Completar documentación
  2417. /// </summary>
  2418. /// <param name="orderBy"></param>
  2419. /// <returns></returns>
  2420. public new CSList<TObject, TKey1, TKey2, TKey3> OrderedBy(string orderBy)
  2421. {
  2422. return (CSList<TObject, TKey1, TKey2, TKey3>)base.OrderedBy(orderBy);
  2423. }
  2424. }
  2425. /// <summary>
  2426. /// TODO Completar documentación
  2427. /// </summary>
  2428. /// <typeparam name="TObject"></typeparam>
  2429. /// <typeparam name="TKey1"></typeparam>
  2430. /// <typeparam name="TKey2"></typeparam>
  2431. [Serializable]
  2432. public class CSList<TObject, TKey1, TKey2> : CSList<TObject> where TObject : CSObject<TObject>
  2433. {
  2434. public CSList()
  2435. {
  2436. }
  2437. public CSList(string filterExpression)
  2438. : base(new CSFilter(filterExpression))
  2439. {
  2440. }
  2441. public CSList(string filterExpression, string paramName, object paramValue)
  2442. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  2443. {
  2444. }
  2445. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  2446. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  2447. {
  2448. }
  2449. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  2450. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  2451. {
  2452. }
  2453. public CSList(string filterExpression, CSParameterCollection parameters)
  2454. : base(new CSFilter(filterExpression, parameters))
  2455. {
  2456. }
  2457. public CSList(string filterExpression, params CSParameter[] parameters)
  2458. : base(new CSFilter(filterExpression, parameters))
  2459. {
  2460. }
  2461. /// <summary>
  2462. /// TODO Completar documentación
  2463. /// </summary>
  2464. /// <param name="filter"></param>
  2465. public CSList(CSFilter filter)
  2466. : base(filter)
  2467. {
  2468. }
  2469. /// <summary>
  2470. /// TODO Completar documentación
  2471. /// </summary>
  2472. /// <param name="sourceCollection"></param>
  2473. public CSList(CSList<TObject> sourceCollection)
  2474. : base(sourceCollection)
  2475. {
  2476. }
  2477. /// <summary>
  2478. /// TODO Completar documentación
  2479. /// </summary>
  2480. /// <param name="key1"></param>
  2481. /// <param name="key2"></param>
  2482. /// <returns></returns>
  2483. public TObject GetByKey(TKey1 key1, TKey2 key2)
  2484. {
  2485. return base.GetByKey(String.Format("{0}{1}{2}", key1, key2));
  2486. }
  2487. /// <summary>
  2488. /// TODO Completar documentación
  2489. /// </summary>
  2490. /// <param name="filter"></param>
  2491. /// <returns></returns>
  2492. public new CSList<TObject, TKey1, TKey2> FilteredBy(string filter)
  2493. {
  2494. return (CSList<TObject, TKey1, TKey2>)base.FilteredBy(filter);
  2495. }
  2496. /// <summary>
  2497. /// TODO Completar documentación
  2498. /// </summary>
  2499. /// <param name="filter"></param>
  2500. /// <param name="paramName"></param>
  2501. /// <param name="paramValue"></param>
  2502. /// <returns></returns>
  2503. public new CSList<TObject, TKey1, TKey2> FilteredBy(string filter, string paramName, object paramValue)
  2504. {
  2505. return (CSList<TObject, TKey1, TKey2>)base.FilteredBy(filter, paramName, paramValue);
  2506. }
  2507. /// <summary>
  2508. /// TODO Completar documentación
  2509. /// </summary>
  2510. /// <param name="predicate"></param>
  2511. /// <returns></returns>
  2512. public new CSList<TObject, TKey1, TKey2> FilteredBy(Predicate<TObject> predicate)
  2513. {
  2514. return (CSList<TObject, TKey1, TKey2>)base.FilteredBy(predicate);
  2515. }
  2516. /// <summary>
  2517. /// TODO Completar documentación
  2518. /// </summary>
  2519. /// <param name="orderBy"></param>
  2520. /// <returns></returns>
  2521. public new CSList<TObject, TKey1, TKey2> OrderedBy(string orderBy)
  2522. {
  2523. return (CSList<TObject, TKey1, TKey2>)base.OrderedBy(orderBy);
  2524. }
  2525. }
  2526. /// <summary>
  2527. /// TODO Completar documentación
  2528. /// </summary>
  2529. /// <typeparam name="TObject"></typeparam>
  2530. /// <typeparam name="TKey"></typeparam>
  2531. [Serializable]
  2532. public class CSList<TObject, TKey> : CSList<TObject> where TObject : CSObject<TObject>
  2533. {
  2534. /// <summary>
  2535. /// TODO Completar documentación
  2536. /// </summary>
  2537. public CSList()
  2538. {
  2539. }
  2540. /// <summary>
  2541. /// TODO Completar documentación
  2542. /// </summary>
  2543. /// <param name="filterExpression"></param>
  2544. public CSList(string filterExpression)
  2545. : base(new CSFilter(filterExpression))
  2546. {
  2547. }
  2548. /// <summary>
  2549. /// TODO Completar documentación
  2550. /// </summary>
  2551. /// <param name="filterExpression"></param>
  2552. /// <param name="paramName"></param>
  2553. /// <param name="paramValue"></param>
  2554. public CSList(string filterExpression, string paramName, object paramValue)
  2555. : base(filterExpression, new CSParameterCollection(paramName, paramValue))
  2556. {
  2557. }
  2558. /// <summary>
  2559. /// TODO Completar documentación
  2560. /// </summary>
  2561. /// <param name="filterExpression"></param>
  2562. /// <param name="paramName1"></param>
  2563. /// <param name="paramValue1"></param>
  2564. /// <param name="paramName2"></param>
  2565. /// <param name="paramValue2"></param>
  2566. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2)
  2567. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2))
  2568. {
  2569. }
  2570. /// <summary>
  2571. /// TODO Completar documentación
  2572. /// </summary>
  2573. /// <param name="filterExpression"></param>
  2574. /// <param name="paramName1"></param>
  2575. /// <param name="paramValue1"></param>
  2576. /// <param name="paramName2"></param>
  2577. /// <param name="paramValue2"></param>
  2578. /// <param name="paramName3"></param>
  2579. /// <param name="paramValue3"></param>
  2580. public CSList(string filterExpression, string paramName1, object paramValue1, string paramName2, object paramValue2, string paramName3, object paramValue3)
  2581. : base(filterExpression, new CSParameterCollection(paramName1, paramValue1, paramName2, paramValue2, paramName3, paramValue3))
  2582. {
  2583. }
  2584. /// <summary>
  2585. /// TODO Completar documentación
  2586. /// </summary>
  2587. /// <param name="filterExpression"></param>
  2588. /// <param name="parameters"></param>
  2589. public CSList(string filterExpression, CSParameterCollection parameters)
  2590. : base(new CSFilter(filterExpression, parameters))
  2591. {
  2592. }
  2593. /// <summary>
  2594. /// TODO Completar documentación
  2595. /// </summary>
  2596. /// <param name="filterExpression"></param>
  2597. /// <param name="parameters"></param>
  2598. public CSList(string filterExpression, params CSParameter[] parameters)
  2599. : base(new CSFilter(filterExpression, parameters))
  2600. {
  2601. }
  2602. /// <summary>
  2603. /// TODO Completar documentación
  2604. /// </summary>
  2605. /// <param name="filter"></param>
  2606. public CSList(CSFilter filter)
  2607. : base(filter)
  2608. {
  2609. }
  2610. public CSList(CSList<TObject> sourceCollection)
  2611. : base(sourceCollection)
  2612. {
  2613. }
  2614. public TObject GetByKey(TKey key)
  2615. {
  2616. return base.GetByKey(key);
  2617. }
  2618. public new CSList<TObject, TKey> FilteredBy(string filter)
  2619. {
  2620. return (CSList<TObject, TKey>)base.FilteredBy(filter);
  2621. }
  2622. public new CSList<TObject, TKey> FilteredBy(string filter, string paramName, object paramValue)
  2623. {
  2624. return (CSList<TObject, TKey>)base.FilteredBy(filter, paramName, paramValue);
  2625. }
  2626. public new CSList<TObject, TKey> FilteredBy(string filter, object parameters)
  2627. {
  2628. return (CSList<TObject, TKey>)base.FilteredBy(filter, parameters);
  2629. }
  2630. public new CSList<TObject, TKey> FilteredBy(Predicate<TObject> predicate)
  2631. {
  2632. return (CSList<TObject, TKey>)base.FilteredBy(predicate);
  2633. }
  2634. public new CSList<TObject, TKey> OrderedBy(string orderBy)
  2635. {
  2636. return (CSList<TObject, TKey>)base.OrderedBy(orderBy);
  2637. }
  2638. }
  2639. }