2014-01-28 3 views
0

У меня есть datatable dt_Customers, который содержит Customer_ID, Email и некоторые другие данные. Некоторые из писем являются дубликатами в этой таблице данных, означает, что они повторяют 2,3 или более раз.выберите конкретные строки из datatable, используя предложение C#

Я выбрал различные сообщения электронной почты в списке с помощью:

List<string> Email = dt_Customers.AsEnumerable().Select(r => r.Field<string>("Email")).Distinct().ToList(); 

Против этих выбранных сообщений электронной почты, которые находятся в списке в настоящее время. Можно ли выбрать Customer_ID из таблицы данных?

Или мне нужно написать SQL-запрос, который будет извлекать данные из базы данных SQL Server с выбранными идентификаторами электронной почты в списке.

ответ

2

Или мне нужно написать SQL-запрос, который будет извлекать данные из базы данных SQL Server против выбранных идентификаторов электронной почты в списке.

Нет, вам не обязательно извлекать их из базы данных, вы уже имеете их в своем DataTable. Вы можете использовать следующий запрос, который будет проверять список электронных писем против DataTable в памяти, как:

List<int> customerIDs = dt_Customers.AsEnumerable() 
          .Where(r => Email.Contains(r.Field<string>("Email"))) 
          .Select(r => r.Field<int>("Customer_ID")) 
          .ToList(); 
+0

правильный, но медленный –

0

Вы можете сгруппировать по Email затем выбрать все Customer_ID S из этой группы:

var emails = dt_Customers.AsEnumerable().GroupBy(dr => dr.Field<string>("Email")); 
foreach (var emailGroup in emails) 
{ 
    var email = emailGroup.Key; 
    var ids = emailGroup.Select(dr => dr.Field<int>("Customer_ID "])); 
} 
1

К сожалению, нет Метод DistinctBy в LINQ, here является обходным и пользовательским методом расширения

var customerIds = dt_Customers.AsEnumerable() 
           .GroupBy(r => r.Field<string>("Email")) 
           .Select(g => g.First().Field<int>("Customer_ID")) 
           .ToList(); 
Смежные вопросы