После дальнейших раскопок я пришел к следующему результату: вам просто нужно красиво поговорить с ROW ().
Это будет работать:
INSERT INTO outputTable
SELECT ROW(col1, col2)
FROM (
SELECT
col1,
ROW(col1, col1) as col2
FROM inputTable
) tbl2
Примечание:
Я представил вопрос JIRA здесь:
https://issues.apache.org/jira/projects/FLINK/issues/FLINK-11399
Будет обновлять этот пост соответственно
Атака невозможна. Проблема заключается в том, что определяемое пользователем преобразование должно быть включено в объявление структуры или класса, а преобразование должно быть в / из включающего типа. Таким образом,
public static explicit operator MyEnum(string value)
невозможно, потому что ни MyEnum
, ни string
никогда не могут быть включающим типом.
Соответствующим разделом спецификации ECMA334 C # является 17.9.4:
Оператор преобразования преобразует из типа источника, указанного в типе параметра оператора преобразования, в целевой тип, указанный в возврате тип оператора преобразования. Классу или структуре разрешается объявлять преобразование из исходного типа S в целевой тип T только в том случае, если все из перечисленных ниже истинно, где S0 и T0 - это типы, которые возникают в результате удаления конечного символа? модификаторы, если таковые имеются, из S и T:
S0 и T0 - это разные типы.
Либо S0, либо T0 - это класс или тип структуры, в которых происходит объявление оператора .
Ни S0, ни T0 не являются интерфейсом.
За исключением пользовательских преобразований, преобразования не существует из S в T или из T в S.
Тем не менее, вы можете сделать метод расширения для строкового класса.
public static class StringExtensions {
public static T ConvertToEnum<T>(this string value) {
Contract.Requires(typeof(T).IsEnum);
Contract.Requires(value != null);
Contract.Requires(Enum.IsDefined(typeof(T), value));
return (T)Enum.Parse(typeof(T), value);
}
}
Вы также можете использовать атрибуты «StringValue», чтобы получить то, что вы хотите.
Проверьте этот вопрос: stackoverflow.com/questions/424366/c-string-enums , там есть много информации, которая может помочь.
веселит
Нужно ли использовать оператор приведения? Другой вариант - добавить метод расширения вне строки:
public static class StringEnumConversion
{
public static T Convert<T>(this string str)
{
return (T)Enum.Parse(typeof(T), str);
}
}