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;
		}