LINQ Query не возвращает значения - PullRequest
       29

LINQ Query не возвращает значения

1 голос
/ 14 сентября 2009

В настоящее время я пытаюсь выполнить запрос LINQ над базой данных MS SQL. Это то, что я сделал.

  1. Я могу видеть базу данных, таблицу и данные внутри, если я хочу, через обозреватель сервера.
  2. Я автоматически создал новый DataSet из "Добавить новый элемент ...". Затем я перетащил таблицу из проводника сервера в представление конструктора DataSet. Отображаются правильные заголовки таблицы и столбца. Давайте назовем это «MyTableDataSet».
  3. В моем коде, когда мне нужно запросить, вот как выглядит мой код.

     MyTableDataSet data = new MyTableDataSet ();
     var queryResult =
     from c in data.MyTable
        select c;
    
     foreach (var date in queryResult)
     {
        // nothing!
     }
    
  4. Не знаю почему, но глядя на 'queryResult' через отладчик после запуска запроса, я получаю - Пусто = "Перечисление не дало результатов".

Что-то не так с выражением LINQ? Я предполагаю, что это «SELECT *». Таблица содержит данные, в ней около 50 строк. Может быть, мне нужно «заполнить» набор данных? Я использую проверку подлинности Windows через обозреватель сервера, чтобы увидеть данные. Если я смогу увидеть это оттуда, то и код должен иметь доступ? Точно сказать не могу. : |

Спасибо за любую помощь, которую вы, ребята, могли бы оказать в решении этой проблемы.

Ответы [ 2 ]

4 голосов
/ 14 сентября 2009

Согласно вашему коду, вы создаете новый набор данных и немедленно запрашиваете его. Это, конечно, будет пустым.

Необходимо заполнить набор данных с помощью адаптера таблицы, который был создан при перетаскивании таблицы в конструкторе набора данных.

1 голос
/ 14 сентября 2009

Вот рабочий пример использования DataTable:

var queryResult = from c in data.MyTable select c;
DataTable dt = ToDataTable(yourDataContext, queryResult);

foreach (DataRow dr in dt.Rows)
{
  // ...
}
dt.Dispose();

Функция ToDataTable отсюда :

public DataTable ToDataTable(System.Data.Linq.DataContext ctx, object query)
{
     if (query == null)
     {
          throw new ArgumentNullException("query");
     }

     IDbCommand cmd = ctx.GetCommand(query as IQueryable);
     SqlDataAdapter adapter = new SqlDataAdapter();
     adapter.SelectCommand = (SqlCommand)cmd;
     DataTable dt = new DataTable("sd");

     try
     {
          cmd.Connection.Open();
          adapter.FillSchema(dt, SchemaType.Source); 
          adapter.Fill(dt);
     }
     finally
     {
          cmd.Connection.Close();
     }
     return dt;
}
...