Получить и распечатать данные из динамического SQL-запроса с Linq - PullRequest
4 голосов
/ 25 января 2009

У меня есть некоторый существующий код, который извлекает данные из базы данных с использованием ADO.NET, которые я хочу преобразовать в linq.

Код получает запрос SQL через командную строку, выполняет его, возвращает строки и их имена столбцов, а затем выводит их на экран. Я хотел бы знать, как написать этот код в linq.

ВСЕ SQL-запрос ДОЛЖЕН быть дан через командную строку, так как я хочу ограничить, где я выбираю строки. Это единственный способ сделать это, поэтому если у вас нет метода, который может работать таким образом, я не могу его использовать. Никто не будет иметь доступ к программе, кроме меня, поэтому безопасность не является проблемой.

private static SqlConnection sqlConnection = new SqlConnection();

private static void OConnection()
{
    sqlConnection = new SqlConnection();
    sqlConnection.ConnectionString = MyConsoleApp.Properties.Settings.Default.ConnStr;
    sqlConnection.Open();
}

...

string query = Console.ReadLine();
OpenConn();
SqlCommand command = new SqlCommand(query, sqlConnection);
SqlDataReader reader = command.ExecuteReader();

if (reader != null)
{
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            Console.Write("| {0}: {1}", reader.GetName(i), reader.GetValue(i));
        }
        Console.WriteLine();
    }
}

Ответы [ 3 ]

1 голос
/ 25 января 2009

Я не вижу значения при переходе на LINQ здесь. Прелесть LINQ в том, что вы можете написать свой запрос на языке ваших доменных объектов, а не на T-SQL. В вашем случае вы хотите принимать только актуальные команды SQL. Кажется, что было бы больше работы по деконструкции команды, превращению ее в LINQ - используя отражение для определения соответствующих таблиц в контексте данных - и затем к выполнению запроса только для распечатки свойств результирующих объектов.

0 голосов
/ 25 января 2009

Существует Dynamic LINQ Скотта Гу, который можно найти здесь , но, как уже сказал tvanfosson, вы действительно не собираетесь много решать с переходом на Linq и, скорее всего, больше усилий, чем результата.

0 голосов
/ 25 января 2009

Вы можете добавить хранимые процедуры в свою базу данных, а затем добавить их в linq. Linq обеспечивает хорошую генерацию кода для обработки ваших хранимых процедур, получая и возвращая строки, используя отложенное выполнение.

Если у вас есть динамический запрос, который вы хотите выполнить и который не является хранимой процедурой, вам нужно будет либо придерживаться ADO.Net, либо научиться выражать свой запрос в LINQ. Возможно, если вы предоставите запрос, мы могли бы помочь вам сделать это с вашим контекстом данных.

PS. Когда мы перешли на LINQ, я обнаружил, что объем стандартного кода ADO.Net, который мы должны были написать, резко сократился. Я написал свой SPRoc, сопоставил его с sql и сразу использовал:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...