0

我需要创建一个电子邮件列表。对于每个文件夹,我需要从所有者那里获得所有电子邮件。但是,我在 listRequest.Email = reader["Email"].ToList(); 中有一个错误 错误在“ToList()”中,我声明了命名空间 System.Collections.Generic 但没有解决。

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;
}
4

3 回答 3

2

以下陈述无效。

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

使用 SqlDataReader,您只能读取单个元素,但不能像检索文件夹访问权限那样读取列表。

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

您可以做的一件事是将电子邮件地址检索为逗号分隔值,然后拆分它们。还可以考虑使用 string[] 而不是 List

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;
}
于 2013-07-17T18:00:24.427 回答
1

reader["Email"]是一个对象。没有方法object.ToList()

如果它应该是一个分隔字符串,我建议ToString()Split()你的ToList().

例子:

listRequest.Email = reader["Email"]
    .ToString()
    .Split(new [] {","}, StringSplitOptions.RemoveEmptyEntries)
    .ToList();
于 2013-07-17T17:57:34.963 回答
0

reader["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();
}
于 2013-07-17T18:21:29.140 回答