2015-09-15 4 views
1

У меня есть этот код:DataTable.Select получить все строки?

allGyms.Select("type = 1"); 
foreach(DataRow allGymsRow in allGyms.Rows) 
{ 

} 

The allGyms сохраненные 25 строк, 7 строк с типом 1 и еще 7 с типом 2 и так далее .. Теперь я пытаюсь использовать текущий DataTable для извлечения строк с типом 1, поэтому он должен возвращать 7 строк. Однако, когда я отлаживаю цикл foreach, allGyms имеет 25 строк, а не ожидаемые 7.

Кто-нибудь знает, что я делаю неправильно?

+1

выбрать для проекции не для фильтрации, использование которых –

+0

не сделали этого в течение длительного времени, но вы можете использовать 'DataView' ограничить строки, возвращаемые из' DataTable'. – Tim

+0

Использование Where не работает. В качестве параметра не требуется строка. – mogorilla

ответ

2

другие ответы говорят о методе Select на IEnumerable.

Я считаю, что вы пытаетесь использовать метод Select на DataTable.

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

var filteredRows = allGyms.Select("type = 1"); 
foreach(DataRow allGymsRow in filteredRows) 
{ 
    ... 
} 
+0

или вызвать его на Еогеасп 'Еогеасп (DataRow allGymRow в allGymes.Select ("Тип = 1"). Rows)' Также Mumbo, вы будете нуждаться в '.Rows' где-то там. –

+0

Вам не нужно использовать .Rows. Select возвращает DataRow [] уже, что вы можете напрямую перебирать. – Mumbo

+0

Спасибо, ты единственный человек, который, казалось, понял, чего я хочу, и имел простой подход, спасибо – mogorilla

0

Select() применяет метод для каждого элемента. Это элегантный способ мутировать элементы в коллекции, такие как массив.

Я думаю, что вы хотите создать DataTable, так что вы можете запускать запросы к базе данных из вашего aspx.cs файл следующим образом:

DataTable dt = new DataTable(); 
     using (OracleConnection con = new OracleConnection(Application["ConnectionString"].ToString())) 
     { 
      con.Open(); 
      string strSQL = "SELECT * FROM YourTable WHERE type = 1"; 
      OracleDataAdapter adapter = new OracleDataAdapter(strSQL, con); 
      adapter.Fill(dt); 
      if (dt.Rows.Count > 0) 
       return dt.Rows[0][0].ToString(); 
     } 
     return ""; 
0

Попробуйте использовать Выбрать и где вместе:

allGyms.Select().Where(t => t.type == 1); 
+0

Я думаю, вам нужен 'AsEnumerable()' там, то есть 'allgyms.AsEnumerable(). Выберите(). (t => t.type == 1); '. – Tim

Смежные вопросы