C# 从DB到字符串的IEnumerable

C# 从DB到字符串的IEnumerable,c#,winforms,ienumerable,C#,Winforms,Ienumerable,在下面的代码中,我从数据库中获取数据。但当我重复该操作时,它会再次添加具有相同信息的另一行。 我还没弄明白怎么才能避免它。因此,我希望有人能给我一个例子,说明我如何能以不同的方式做到这一点 按钮点击功能 private void btnSteg2_Click(object sender, EventArgs e) { getData(); mails.AddRange(DataProvider.GetMail()); agents.AddRange(DataProvide

在下面的代码中,我从数据库中获取数据。但当我重复该操作时,它会再次添加具有相同信息的另一行。
我还没弄明白怎么才能避免它。因此,我希望有人能给我一个例子,说明我如何能以不同的方式做到这一点

按钮点击功能

private void btnSteg2_Click(object sender, EventArgs e)
{
    getData();
    mails.AddRange(DataProvider.GetMail());
    agents.AddRange(DataProvider.GetAgentsView());


    //Body
    var body = from template in mails
               where template.Template == "Steg 1"
               select template.Body;
   strBody = String.Join("", body);

    //Subject
    var subj = from template in mails
               where template.Template == "Steg 1"
               select template.Subject;
   strSub = String.Join("", subj);

    var agentNr = from FullName in agents
                  where FullName.FullName == agentId
                  select FullName.FixedNr;
    strAgentNr = String.Join("", agentNr);


    strBody = strBody.Replace("[ddate]", dateId);
    strBody = strBody.Replace("[agent]", agentId);
    strBody = strBody.Replace("[agentnr]", strAgentNr);


    strSub = strSub.Replace("[ftgnamn]", ftgId);
    strSub = strSub.Replace("[orgnr]", orgId);
    strSub = strSub.Replace("[caseid]", caseId);

    //Send_Email_Outlook(string _recipient, string _message, string _subject, string _cc, string _bcc, string accountname)
    Mail.Send_Email_Outlook(kpmail, strBody, strSub, "", "", "");
    strAgentNr = String.Empty;
    strBody = String.Empty;
    strSub = String.Empty;
}
我如何获取数据的示例

  public class MailItem : EntityDB, INotifyPropertyChanged
    {
        private const string TableName = "MAILTEMPLATE";
        private static SchemaJS Schema = null;

        public event PropertyChangedEventHandler PropertyChanged;

        public MailItem()
        {
            InitializeNew();
        }

        public MailItem(DataRowJS DRow)
        {
            base.DRow = DRow;
            base.DRow.Schema.TableName = TableName;
        }


        public string Template
        {
            get { return DRow.ToStr("TEMPLATE"); }
            set
            {
                DRow["TEMPLATE"] = value;
                NotifyPropertyChanged("Template");
            }
        }
        public string Subject
        {
            get { return DRow.ToStr("SUBJECT"); }
            set
            {
                DRow["SUBJECT"] = value;
                NotifyPropertyChanged("Subject");
            }
        }
        public string Body
        {
            get { return DRow.ToStr("BODY"); }
            set
            {
                DRow["BODY"] = value;
                NotifyPropertyChanged("Body");
            }
        }
起初我认为我可以使用
strobdy=String.Empty
清除字符串并避免在每次按下按钮后,它不会随着电子邮件的另一个正文而增加。。之所以使用
String.Join
,是因为我还没有找到另一种方法将其转换为字符串

我有点困了,非常感谢你的帮助。希望以上信息足以理解我的问题

编辑

通过不反复调用
mails.AddRange
解决了此问题。
body.First()是一个更好的选择。

好吧,
mails.AddRange(DataProvider.GetMail())将继续添加获得的项目。如果您不希望重复,请使用
mail=DataProvider.GetMail()
而不是获取字符串,我很确定您正在查找
strobdy=body.First()
。你可能想读书