public static string GetLinqPath(this TabularObject obj, bool explicitCast = true) { if (explicitCast) { switch (obj) { case Column _: case Partition _: case Table _: case DataSource _: case Relationship _: return $"({GetLinqPath(obj)} as {obj.GetType().Name})"; default: return GetLinqPath(obj); } } else return GetLinqPath(obj); }
private static string GetLinqPath(this TabularObject obj) { switch (obj) { case KPI kpi: return(kpi.Measure.GetLinqPath() + ".KPI"); case Model model: return("Model"); case Column column: return(string.Format("{0}.Columns[\"{1}\"]", column.Table.GetLinqPath(), column.Name)); case Measure measure: return(string.Format("{0}.Measures[\"{1}\"]", measure.Table.GetLinqPath(), measure.Name)); case Hierarchy hierarchy: return(string.Format("{0}.Hierarchies[\"{1}\"]", hierarchy.Table.GetLinqPath(), hierarchy.Name)); case Partition partition: return(string.Format("{0}.Partitions[\"{1}\"]", partition.Table.GetLinqPath(), partition.Name, obj.GetType().Name)); case Table table: return(string.Format("Model.Tables[\"{0}\"]", table.Name)); case Level level: return(string.Format("{0}.Levels[\"{1}\"]", level.Hierarchy.GetLinqPath(), level.Name)); case Perspective perspective: return(string.Format("{0}.Perspectives[\"{1}\"]", obj.Model.GetLinqPath(), perspective.Name)); case Culture culture: return(string.Format("{0}.Cultures[\"{1}\"]", obj.Model.GetLinqPath(), culture.Name)); case DataSource ds: return(string.Format("{0}.DataSources[\"{1}\"]", obj.Model.GetLinqPath(), ds.Name, obj.GetType().Name)); case Relationship rel: return(string.Format("{0}.Relationships[{1}]", obj.Model.GetLinqPath(), rel.MetadataIndex, obj.GetType().Name)); case ModelRole role: return(string.Format("{0}.Roles[\"{1}\"]", obj.Model.GetLinqPath(), role.Name)); case NamedExpression expression: return(string.Format("{0}.Expressions[\"{1}\"]", obj.Model.GetLinqPath(), expression.Name)); case TablePermission tp: return(string.Format("{0}.TablePermissions[\"{1}\"]", tp.Role.GetLinqPath(), tp.Table.Name)); case CalculationItem ci: return(string.Format("{0}.CalculationItems[\"{1}\"]", ci.CalculationGroupTable.GetLinqPath(true), ci.Name)); case Variation variation: return(string.Format("{0}.Variations[\"{1}\"]", variation.Column.GetLinqPath(), variation.Name)); case CalculationGroup cg: return(string.Format("{0}.CalculationGroup", cg.Table.GetLinqPath(true))); case AlternateOf altOf: return(string.Format("{0}.AlternateOf", altOf.Column.GetLinqPath())); default: throw new NotSupportedException(); } }