Как реализовать условие в C# на стадии SQL запроса?

SNenko
Дата: 19.05.2014 11:57:59
Здраствуйте.

Есть запрос в таблицу ексель.

DataTable dt;
String connectionString = @"Provider=Microsoft.Jet.Oledb.4.0;Data Source=C:\om.xls;Extended Properties=Excel 8.0";

query = @" SELECT [a].[f1], [a].[f2] FROM  [COMPLETED$] a";

dt = ExcelWorksheetToDataTable(query, connectionString);


В зависимости от значений полей [f1] и [f2], поле [Status] получает:Cancelled, Created, Implemented, Pending или Received.

Это Можна сделать методом перебора строк в DataTable dt;

Но, хотелось бы получить готовый результат уже на стадии исполнения sql.

Был бы это SQLServer, создал бы и использовал в нем свою функцию getStatus(param1, param2):

SELECT [a].[f1], [a].[f2], getStatus([a].f1, [a].[f2]) as [Status]
FROM  [COMPLETED$] a;


Как реализовать условие в C# на стадии SQL запроса?

Спасибо за внимание!
Cat2
Дата: 19.05.2014 17:17:42
SNenko,

Ничего не понял
Arm79
Дата: 19.05.2014 17:45:42
Зависит от драйвера. Не уверен, что Jet для Excel поддерживает синтаксис CASE WHEN THEN ELSE END.
Если бы речь шла не о DataTable, можно было бы посоветовать LINQ. А в вашем случае - вычисляемый столбец в DataTable должен решить проблему.
SNenko
Дата: 19.05.2014 18:02:42
Arm79
Зависит от драйвера. Не уверен, что Jet для Excel поддерживает синтаксис CASE WHEN THEN ELSE END.
Если бы речь шла не о DataTable, можно было бы посоветовать LINQ. А в вашем случае - вычисляемый столбец в DataTable должен решить проблему.


Arm79,

Я тоже так думаю.
Но решил уточнить..

Пака работаю через с#:
        public static DataTable getProcessing(DataTable dt, string statusDefault = "")
        {
            dt = deleteHead(dt);
            dt = renameColumns(dt);
            dt = status(dt, statusDefault);

            return dt;
        }
Shocker.Pro
Дата: 19.05.2014 18:02:56
Arm79
Не уверен, что Jet для Excel поддерживает синтаксис CASE WHEN THEN ELSE END.
если нет, то поддерживает IIF