using System.Collections; using System.Collections.Generic; using System.Linq; using Marr.Data.Mapping; namespace Marr.Data.QGen { /// /// This class represents a View. A view can hold multiple tables (and their columns). /// public class View : Table, IEnumerable { private string _viewName; private Table[] _tables; private ColumnMapCollection _columns; public View(string viewName, Table[] tables) : base(tables[0].EntityType, JoinType.None) { _viewName = viewName; _tables = tables; } public Table[] Tables { get { return _tables; } } public override string Name { get { return _viewName; } set { _viewName = value; } } public override string Alias { get { return base.Alias; } set { base.Alias = value; // Sync view tables foreach (Table table in _tables) { table.Alias = value; } } } /// /// Gets all the columns from all the tables included in the view. /// public override ColumnMapCollection Columns { get { if (_columns == null) { var allColumns = _tables.SelectMany(t => t.Columns); _columns = new ColumnMapCollection(); _columns.AddRange(allColumns); } return _columns; } } public IEnumerator
GetEnumerator() { foreach (Table table in _tables) { yield return table; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }