protected virtual TableExpression BuildTable(ITableDefinition definition) { var destType = definition.GetTableType(); var tableName = definition.GetTableName(); var columns = definition.GetColumns(); var tableAlias = GetNextAlias(); var param = Expression.Parameter(destType, "x"); var assignList = columns .Select(col => Expression.Bind( col.MemberInfo, CompleteExpression.Column( Expression.MakeMemberAccess(param, col.MemberInfo), col.ColumnName))) .ToList(); var projection = Expression.Lambda( Expression.MemberInit( Expression.New(destType), assignList), param); var table = CompleteExpression.Table(destType, tableAlias, tableName, projection); return table; }