我的代码中有一个字符串,它连接数据库中各个表的电子邮件地址,然后显示在cc字段的outlook中。
我想要的只是过滤字符串,以便字符串不包含任何重复的电子邮件地址。换句话说,我不希望在输出中再次重复单个电子邮件地址。
请帮助
DataSet ds = DatabaseFunctions.getEmailsBySPROC("getEmailByCircuit", sql_CircuitEmail);
if (ds != null)
{
for (int idx = 0; idx < ds.Tables[0].Rows.Count; idx++)
{
emailList = emailList + ds.Tables[0].Rows[idx]["Email"].ToString() + ";";
}
}
这是从一个表中退出的代码..
有另一个代码从另一个表中检索.. \和字符串是电子邮件列表分开;分号
答案 0 :(得分:20)
第一个也是最明显的建议是在数据库方面将其过滤掉;这意味着从数据库中检索数据时,如果可能,请添加“distinct”子句,以便只获得不同的电子邮件地址。
否则,您可以将所有电子邮件地址添加到HashSet&lt; string&gt;它会自动为您复制重复项。
重新编写代码:
DataSet ds = DatabaseFunctions.getEmailsBySPROC("getEmailByCircuit", sql_CircuitEmail);
if (ds != null)
{
DataTable table = ds.Tables[0];
HashSet<string> emails = new HashSet<string>();
for (int idx = 0; idx < table.Rows.Count; idx++)
{
emails.Add(table.Rows[idx]["Email"].ToString());
}
}
StringBuilder result = new StringBuilder();
foreach(string email in emails)
{
result.Append(email + ";");
}
emailList = result.ToString();
答案 1 :(得分:4)
var emails = new HashSet<String>();
var email = " Blah@blah.com ".Trim().ToLower();
emails.Add(email);
答案 2 :(得分:3)
using System;
using System.Collections.Generic;
using System.Linq;
namespace UniqueEmailAddresses
{
class Program
{
static void Main(string[] args)
{
const string emailList
= "bob@example.com; sally@example.com; fred@example.com; sally@example.com";
var result = emailList.Replace(" ", "").Split(';').Distinct();
foreach( var addy in result)
{
Console.WriteLine(addy);
}
Console.ReadKey();
}
}
}
打印
bob@example.com
sally@example.com
fred@example.com
莎莉只出现一次。
答案 3 :(得分:1)
正如BFree所说,你可以(假设你没有从数据库中提取大量记录)轻松地执行以下操作:
var emails = new HashSet<string>(yourStrings);
它应该自动过滤掉它们,你可以使用HashSet集合轻松迭代。
答案 4 :(得分:1)
DataSet ds = DatabaseFunctions.getEmailsBySPROC("getEmailByCircuit", sql_CircuitEmail);
if (ds != null)
{
for (int idx = 0; idx < ds.Tables[0].Rows.Count; idx++)
{
emailList = emailList + ds.Tables[0].Rows[idx]["Email"].ToString() + ";";
}
}
从一张桌子中挑选出来......然后我也会从另一张桌子上挑选它,
答案 5 :(得分:0)
添加到集合而不是集合包含。
List<string> list = new List<string>();
if (!list.contains("mail") )
{
list.add("mail");
}