Mercurial > pub > bltoolkit
comparison Source/Data/Sql/Join.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Collections.Generic; | |
3 using System.Text; | |
4 | |
5 namespace BLToolkit.Data.Sql | |
6 { | |
7 using Reflection.Extension; | |
8 | |
9 public class Join : IQueryElement, ICloneableElement | |
10 { | |
11 public Join() | |
12 { | |
13 } | |
14 | |
15 public Join(string tableName, params JoinOn[] joinOns) | |
16 : this(tableName, null, joinOns) | |
17 { | |
18 } | |
19 | |
20 public Join(string tableName, string alias, params JoinOn[] joinOns) | |
21 { | |
22 _tableName = tableName; | |
23 _alias = alias; | |
24 _joinOns.AddRange(joinOns); | |
25 } | |
26 | |
27 public Join(string tableName, string alias, IEnumerable<JoinOn> joinOns) | |
28 { | |
29 _tableName = tableName; | |
30 _alias = alias; | |
31 _joinOns.AddRange(joinOns); | |
32 } | |
33 | |
34 public Join(AttributeExtension ext) | |
35 { | |
36 _tableName = (string)ext["TableName"]; | |
37 _alias = (string)ext["Alias"]; | |
38 | |
39 var col = ext.Attributes["On"]; | |
40 | |
41 foreach (AttributeExtension ae in col) | |
42 _joinOns.Add(new JoinOn(ae)); | |
43 } | |
44 | |
45 private string _tableName; | |
46 public string TableName { get { return _tableName; } set { _tableName = value; } } | |
47 | |
48 private string _alias; | |
49 public string Alias { get { return _alias; } set { _alias = value; } } | |
50 | |
51 readonly List<JoinOn> _joinOns = new List<JoinOn>(); | |
52 public List<JoinOn> JoinOns | |
53 { | |
54 get { return _joinOns; } | |
55 } | |
56 | |
57 public Join Clone() | |
58 { | |
59 var join = new Join(_tableName, _alias); | |
60 | |
61 foreach (var on in JoinOns) | |
62 join.JoinOns.Add(new JoinOn(on.Field, on.OtherField, on.Expression)); | |
63 | |
64 return join; | |
65 } | |
66 | |
67 #region IQueryElement Members | |
68 | |
69 public QueryElementType ElementType { get { return QueryElementType.Join; } } | |
70 | |
71 StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary<IQueryElement,IQueryElement> dic) | |
72 { | |
73 return sb; | |
74 } | |
75 | |
76 #endregion | |
77 | |
78 #region ICloneableElement Members | |
79 | |
80 public ICloneableElement Clone(Dictionary<ICloneableElement,ICloneableElement> objectTree, Predicate<ICloneableElement> doClone) | |
81 { | |
82 if (!doClone(this)) | |
83 return this; | |
84 | |
85 ICloneableElement clone; | |
86 | |
87 if (!objectTree.TryGetValue(this, out clone)) | |
88 objectTree.Add(this, clone = new Join( | |
89 _tableName, | |
90 _alias, | |
91 _joinOns.ConvertAll(j => (JoinOn)j.Clone(objectTree, doClone)))); | |
92 | |
93 return clone; | |
94 } | |
95 | |
96 #endregion | |
97 } | |
98 } |