0

我有一个 foreach 循环将电子邮件地址添加到数组中。最后,我加入数组并将其推入字符串中。

当数据库中的某个人的电子邮件地址为空白时,我遇到了一个问题,这会扰乱我的逻辑。有人可以帮我解决这个问题吗?

TestGuy1: 
TestGuy2: 2@2.com
TestGuy3: 3@3.com

使用上述信息,它会创建一个 3 长度的数组,然后将其转换为如下所示的字符串:

sEmailList  "2@2.com,3@3.com,"  string

代码:

DataTable GetUserReportsToChain = objEmployee.GetUserReportsToChain(LoginID, ConfigurationManager.AppSettings.Get("Connection").ToString());

int RowCount = GetUserReportsToChain.Rows.Count;
string[] aEmailList = new string[RowCount];
int iCounter = 0;
foreach (DataRow rRow in GetUserReportsToChain.Rows)
{
    if (rRow["usrEmailAddress"].ToString() != "")
    {
        aEmailList[iCounter] = rRow["usrEmailAddress"].ToString();
        iCounter++;
        //String email = rRow["usrEmailAddress"].ToString(); 
    }
}

string sEmailList = String.Join(",", aEmailList);

知道当数据库有电子邮件的空白值时如何解决这个问题吗?

4

5 回答 5

4

您想使用List<string>而不是固定大小的数组。或返回非空字符串的简单 LINQ 查询。

List<string> aEmailList = new List<string>();
foreach (DataRow rRow in GetUserReportsToChain.Rows)
{
    if (!String.IsNullOrEmpty(rRow["usrEmailAddress"].ToString()))
    {
        aEmailList.Add(rRow["usrEmailAddress"].ToString());
    }
}
string sEmailList = String.Join(",", aEmailList);
于 2012-08-28T19:02:47.753 回答
4

一体

var sEmailList = String.Join(",", 
      GetUserReportsToChain.Rows
      .Cast<DataRow>()
      .Select(m => m["usrEmailAddress"].ToString())
      .Where(x => !string.IsNullOrWhiteSpace(x)));
于 2012-08-28T19:08:04.270 回答
2

你可以试试

String.Join(",", aEmailList.Where(s => !string.IsNullOrEmpty(s)));
于 2012-08-28T19:03:11.410 回答
2

您可以将 if 语句更改为:

if(!string.IsNullOrEmpty(rRow["usrEmailAddress"].ToString().Trim())
于 2012-08-28T19:06:25.320 回答
0

如果您使用的是 3.0 或更高版本:

String.Join(",", aEmailList.Where(s => s.Trim() != ""));
于 2012-08-28T19:03:24.787 回答