2 // System.Data.RelatedDataView
\r
5 // Konstantin Triger (kostat@mainsoft.com)
\r
9 using System.Collections;
\r
10 using Mono.Data.SqlExpressions;
\r
11 using System.Data.Common;
\r
13 namespace System.Data
\r
16 /// Summary description for RelatedDataView.
\r
18 internal class RelatedDataView : DataView, IExpression
\r
22 object[] _keyValues;
\r
23 DataColumn[] _columns;
\r
25 #endregion // Fields
\r
27 #region Constructors
\r
28 internal RelatedDataView(DataColumn[] relatedColumns,object[] keyValues)
\r
30 dataTable = relatedColumns[0].Table;
\r
31 rowState = DataViewRowState.CurrentRows;
\r
32 _columns = relatedColumns;
\r
33 _keyValues = keyValues;
\r
38 #endregion // Constructors
\r
42 internal override IExpression FilterExpression {
\r
49 #endregion // Methods
\r
51 public override bool Equals(object obj)
\r
53 if (!(obj is RelatedDataView)) {
\r
54 if (base.FilterExpression == null)
\r
56 return base.FilterExpression.Equals (obj);
\r
59 RelatedDataView other = (RelatedDataView) obj;
\r
60 if (_columns.Length != other._columns.Length)
\r
63 for (int i = 0; i < _columns.Length; i++)
\r
64 if (!_columns[i].Equals(other._columns [i]) ||
\r
65 !_keyValues[i].Equals(other._keyValues [i]))
\r
68 if (!other.FilterExpression.Equals (base.FilterExpression))
\r
74 public override int GetHashCode()
\r
77 for (int i = 0; i < _columns.Length; i++) {
\r
78 hashCode ^= _columns [i].GetHashCode ();
\r
79 hashCode ^= _keyValues [i].GetHashCode ();
\r
82 if (base.FilterExpression != null)
\r
83 hashCode ^= base.FilterExpression.GetHashCode ();
\r
88 #region IExpression Members
\r
90 public object Eval(DataRow row) {
\r
91 return EvalBoolean(row);
\r
94 public bool EvalBoolean(DataRow row) {
\r
95 for (int i = 0; i < _columns.Length; i++)
\r
96 if (!row[_columns[i]].Equals(_keyValues[i]))
\r
99 IExpression filter = base.FilterExpression;
\r
100 return filter != null ? filter.EvalBoolean(row) : true;
\r
103 public bool DependsOn(DataColumn other) {
\r
104 for (int i = 0; i < _columns.Length; i++)
\r
105 if (_columns[i] == other)
\r
108 IExpression filter = base.FilterExpression;
\r
109 return filter != null ? filter.DependsOn(other) : false;
\r
112 void IExpression.ResetExpression()