我有一个数据表dt_Customers
,其中包含Customer_ID
,Email
和其他一些数据。有些电子邮件在此数据表中是重复的,这意味着它们重复2,3次或更多次。
我使用以下选项在列表中选择了不同的电子邮件:
List<string> Email = dt_Customers.AsEnumerable().Select(r => r.Field<string>("Email")).Distinct().ToList();
对照现在列表中的这些选定电子邮件。是否可以从数据表中选择Customer_ID
?
或者我必须编写SQL查询,该查询将从列表中选定的电子邮件ID中获取SQL Server数据库中的数据。
答案 0 :(得分:2)
或者我必须编写SQL查询,它将从SQL Server获取数据 数据库针对列表中选定的电子邮件ID。
不,您不必再从数据库中获取它们,您已经在DataTable
中拥有它们。您可以使用以下查询来查看内存中DataTable
的电子邮件列表,例如:
List<int> customerIDs = dt_Customers.AsEnumerable()
.Where(r => Email.Contains(r.Field<string>("Email")))
.Select(r => r.Field<int>("Customer_ID"))
.ToList();
答案 1 :(得分:1)
不幸的是LINQ中没有DistinctBy方法,here是解决方法和自定义扩展方法
var customerIds = dt_Customers.AsEnumerable()
.GroupBy(r => r.Field<string>("Email"))
.Select(g => g.First().Field<int>("Customer_ID"))
.ToList();
答案 2 :(得分:0)
您可以按Email
进行分组,然后从该群组中选择所有Customer_ID
:
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 "]));
}