2013-07-17 1 views
0

Мне нужно создать список электронной почты. Для каждой папки мне нужно получить все сообщения от владельцев. Но у меня есть ошибка в listRequest.Email = reader ["Email"]. ToList(); Ошибка в «ToList()», я объявляю пространство имен System.Collections.Generic, но не решает.Создать список Email

public class ListRequest 
{ 
    public List<string> Email { get; set; } 
    public string FolderAccess { get; set; } 
} 

public List<ListRequest> PreencheValores(SqlDataReader reader) 
{ 
    var lista = new List<ListRequest>(); 
    while (reader.Read()) 
    { 
     var listRequest = new ListRequest(); 
     listRequest.Email = reader["Email"].ToList(); 
     listRequest.FolderAccess = reader["FolderAccess"].ToString(); 
     lista.Add(listRequest); 
    } 
    return lista; 
} 
+0

вы можете отправить сообщение об ошибке вы получаете? – ApolloSoftware

+0

Какое поле базы данных является полем «Электронная почта»? Вы не можете просто преобразовать что-либо в список ... – Tim

+1

Каков формат значения 'reader [" email "]'? –

ответ

1

reader["Email"] - объект. Там нет способа object.ToList()

Если предполагается, что строки с разделителями, я рекомендую делать ToString(), то Split() перед вашим ToList().

Пример:

listRequest.Email = reader["Email"] 
    .ToString() 
    .Split(new [] {","}, StringSplitOptions.RemoveEmptyEntries) 
    .ToList(); 
+0

«читатель [« Электронная почта »] не является объектом» - um, вы имеете в виду «* is * a object»? –

+0

Да, я сделал, спасибо! – Khan

2

Ниже заявление не является действительным.

listRequest.Email = reader["Email"].ToList(); 

Использование SqlDataReader вы можете прочитать только один элемент, а не список, как то, что вы сделали, чтобы получить доступ к папке.

listRequest.FolderAccess = reader["FolderAccess"].ToString(); 

Одна вещь, которую вы можете сделать, - это получить адреса электронной почты в виде значений, разделенных запятой, а затем разделить их. Также рассмотрите использование строки [] вместо списка

public class ListRequest 
{ 
    public string[] Email { get; set; } 
    public string FolderAccess { get; set; } 
} 


public List<ListRequest> PreencheValores(SqlDataReader reader) 
{ 
    var lista = new List<ListRequest>(); 
    while (reader.Read()) 
    { 
     var listRequest = new ListRequest(); 
     if(reader["Email"] != null) 
      listRequest.Email = reader["Email"].ToString().Split(','); 
     if(reader["FolderAccess"] != null) 
      listRequest.FolderAccess = reader["FolderAccess"].ToString(); 
     lista.Add(listRequest); 
    } 
    return lista; 
} 
+0

Не работает для меня! =/У меня есть страница с Папкой имен и одной CheckBox и кнопкой «Отправить». My Event Send отправил электронное письмо для каждой строки с установленным флажком. Но у меня есть 2 или более владельца электронной почты для каждой строки, в моей базе данных. Моя проблема заключается в том, чтобы получить всю электронную почту для каждой строки, но не дублировать информацию на моей странице. – CaioVJesus89

+0

Я получаю то, что вы говорите, так как упоминалось, что вы не можете получить несколько записей, используя ToList(). Вам нужно написать запрос базы данных, который дает несколько записей в виде одной записи с адресами электронной почты с разделителями-запятыми. Установите условие «для xml» в sql, чтобы узнать, как это сделать. – Sunny

0

читатель ["Email"] не является коллекцией. Он получает значение указанного столбца в собственном формате с учетом имени столбца.

Так что это

var lstEmail = new List<string>(); 
using (connection) 
{ 
    SqlCommand command = new SqlCommand("SELECT Email FROM TableName;",connection);                   
    connection.Open(); 
    SqlDataReader reader = command.ExecuteReader(); 

    if (reader.HasRows) 
    { 
     while (reader.Read()) 
     { 
      lstEmail .add(reader.GetString(0)) 
     } 
    } 
    reader.Close(); 
} 
Смежные вопросы