2011-05-04 1 views
1
public IEnumerable GetAddress() 
{ 
    DataSet ds = DataOps.GetDataSet(string.Format(" select * from Students")); 
    DataTable dt = ds.Tables[0]; 
    // What goes here? 
} 

мне нужно использовать IEnumerable методыC#: возврат IEnumerable, когда поле не равно нулю?

Как я могу вернуть перечисление DataRows, содержащих все студенты, которые имеют только адреса?

+0

Что значит «кто имеет адрес только» Я смущен этим утверждением. –

ответ

1

Я думаю, что вы ищете является

DataRow[] dr = ds.Tables[0].Select("Address NOT NULL"); // you want filtering on address column 
    foreach (DataRow row in dr) 
    { 

    } 
+0

Спасибо Muhammad – Tenzin

3

Я не знаю, что ваш класс студент выглядит, но вот макете

private IEnumerable<Student> GetAddress() 
     { 
      DataSet ds = DataOps.GetDataSet(string.Format(" select * from Students Where NOT NULL [address]")); 
      DataTable dt = ds.Tables[0]; 


      foreach (DataRow row in dt.Rows) 
      { 
       yield return new Student 
             {           
              StudentName = row["StudentName "].ToString(), 
              Address= row["Address"].ToString() 
             }; 
      } 

     } 

Это должно дать вам некоторое представление о том, куда идти отсюда.

+0

Большое спасибо за быстрый ответ. На самом деле вышеописанный метод должен возвращать перечисление DataRows, содержащее всех адресов, имеющих только адрес. datatable dt имеет набор записей со всей информацией о студентах. Теперь мне нужно отфильтровать записи и получить только один адрес и вернуть их. я все еще смущен. – Tenzin

+0

Посмотрите на мой ответ, я фильтрую результаты. –

+0

Хорошо, я обновил ответ, чтобы отразить запросы студентов, у которых есть адрес. Любая фильтрация должна обрабатываться в запросе, если только это не будет изменено на стороне клиента. – AnonUser

0

IEnumerable лишь некоторым абстрактным список которых вы можете перебирать - есть много способов возвращения экземпляра IEnumerable, например:

  • Использование конструкции yield return (только для .NET 4.0)
  • Возврат List<T> или массив или любой другой класс, который уже реализует IEnumerable,

Например:

public IEnumerable GetAddress() 
{ 
    DataSet ds = DataOps.GetDataSet(string.Format(" select * from Students")); 
    DataTable dt = ds.Tables[0]; 

    // The chances are that instead of string you will need a struct or a class 
    List<string> retVal = new List<string>(); 
    foreach (DataRow row in dt) 
    { 
     // This will obviously depend on the table and return type 
     retVal.Add((string)row["mycol"]); 
    } 
} 

Кроме того, в зависимости от типа вернулись вы, вероятно, хотите вернуть IEnumerable<T> вместо этого, так как это поточно.

+0

Спасибо Kragen, я получаю это сейчас: foreach оператор не может работать на валидном типе system.data.datatable не содержит defination для Getenumerator, и, как вы сказали, код недоволен строкой, как решить эту проблему? – Tenzin

+0

@Tenzin Какая версия .Net framework вы используете и используете есть 'using System.Collections.Generic' в верхней части вашего файла? Извините, я не владею с помощью 'DataTables'. Я попытаюсь исправить свой образец, когда у меня появится шанс. – Justin

+0

его 3.5, и я просто добавил пространство имен, которое исправлено. – Tenzin

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

  • Нет связанных вопросов^_^