Mada Naga Sankar Ответов: 1

Выражение столбца Datatable


Привет,

В объект DataTable, мне нужно, чтобы сохранить расширение файла, получая из столбца именем в пределах одного объекта DataTable.

Для этого я использую sql выражение как показано ниже

iif(@str like '%.%',reverse(left(reverse(@str), charindex('.', reverse(@str)) - 1)),'')


это необходимо добавить в значение datacolumn по умолчанию

dt.Columns.Add("FileExtension", typeof(string), "iif([Resume Doc Name] like '%.%',reverse(left(reverse([Resume Doc Name]), charindex('.', reverse([Resume Doc Name])) - 1)),'')");


Но вышеприведенный код терпит неудачу при обратной функции.

Есть какие-нибудь предложения по достижению этой цели?

Спасибо

Что я уже пробовал:

Пробовал по - разному использовать sql-выражения

ZurdoDev

Что вы подразумеваете под "неудачей"? Вы получаете сообщение об ошибке?

Richard MacCutchan

Почему бы просто не использовать CHARINDEX и правильно?

1 Ответов

Рейтинг:
2

Maciej Los

Согласно документация[^], ля reverse функция недоступна. Существует только набор функций для столбца выражения, т. е.: Convert, Len, IsNull, Iif, Trim и Substring.

Если вы хотите перевернуть текст, вы можете использовать запрос Linq. Пример:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("CarType", typeof(string)));
dt.Rows.Add(new object[]{"Skoda", null});
dt.Rows.Add(new object[]{"Volkswagen", "Business"});
dt.Rows.Add(new object[]{"Mazda", "Personal"});
dt.Rows.Add(new object[]{"Renault", "Business"});

var result = dt.AsEnumerable()
	.Select(x=>new
	{
		Name = x.Field<string>("Name"),
		CarType = x.Field<string>("CarType"),
		ReversedName = string.Join("", x.Field<string>("Name").Reverse())
	})
	.ToList();

Результат:
Name       CarType  ReversedName
Skoda      null     adokS 
Volkswagen Business negawskloV 
Mazda      Personal adzaM 
Renault    Business tluaneR