2016-05-23 2 views
0

У меня есть DataTable с две колонки: File & EmailC# Группа DataRows в DataTable

C://file1.jpg [email protected] 
C://file2.jpg [email protected] 
C://file3.jpg [email protected] 
C://file4.jpg [email protected] 
C://file5.jpg [email protected] 

В моем коде я Переберите DataRow с и отправить по электронной почте Email с File прилагается.

Проблема:

мне нужно каким-то образом проверить, есть ли какие-либо другие DataRow s с тем же Email и если да, то отправить только одно сообщение с несколькими вложениями.

Так что выше DataTable приведет к 3 писем:

file1,file2 sent to [email protected] 
file3,file5 sent to [email protected] 
file4 sent to [email protected] 

Мой пример кода:

foreach (DataRow row in dt.Rows) { 
    string file = row[0].ToString(); 
    string email = row[1].ToString(); 
    SendEmailWithAttachments(email,file); 
} 

я мог пройти StringCollection или массив в моей SendEmailWithAttachments() функции, то цикл Повсеместно его и прикрепить все файлы, но как их группировать DataRow s на первом месте

+0

насчет [GroupBy] (https://msdn.microsoft.com/en-us/library/bb534304 (v = vs.100) .aspx) электронная почта? – Pikoh

+2

Возможно, первое, что нужно сделать, - это изменить _SendEmailWithAttachments_, чтобы принять «Список » с именами файлов для текущего письма – Steve

ответ

2

Использование GroupBy Расширение Linq вы можете обрабатывать ваши DataRows, группируя их для поля электронной почты, а затем foreach создайте список строк с именами файлов.

Конечно, вам нужно также изменить SendMailWithAttachments получить в качестве второго параметра а List<string> вместо одной строки

var g = dt.AsEnumerable().GroupBy(d => d.Field<string>("Email")); 
foreach (var x in g) 
{ 
    List<string> files = new List<string>(); 
    foreach (var z in x) 
     files.Add(z.Field<string>("File")); 

    SendEmailWithAttachments(email,files); 

} 
1

Вы можете использовать GroupBy группе по электронной почте:

 DataTable dt = new DataTable(); 
     dt.Columns.Add("Path"); 
     dt.Columns.Add("Email"); 
     DataRow dr = dt.NewRow(); 
     dr.ItemArray=new object[2]{"C://file1.jpg", "[email protected]"}; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 

     dr.ItemArray=new object[2]{"C://file2.jpg", "[email protected]"}; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr.ItemArray=new object[2]{"C://file3.jpg", "[email protected]"}; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr.ItemArray=new object[2]{"C://file4.jpg", "[email protected]"}; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr.ItemArray=new object[2]{"C://file5.jpg", "[email protected]"}; 
     dt.Rows.Add(dr); 


     var grouped=dt.AsEnumerable().GroupBy(x=>x.Field<string>("Email")); 

     foreach (var mail in grouped) 
     { 
      List<string> filesForEmail = new List<string>(); 
      foreach (var file in mail) 
      { 
       filesForEmail.Add(file.Field<string>("Path")); 
      } 

      SendEmailWithAttachments(mail.Key, filesForEmail); 
     } 
Смежные вопросы