One way would be that you don't cast the results as a list. Remove the ToList call from the end and let the result be a data tables.
After that using Distinct for they key column fetch all the distinct values and lop through them. In each iteration create a new data table based on a dataview.
So in pseudo code something like (not to be compiled):
foreach (string email in result.select(x => x.Field("email")).Distinct()) {
result.DefaultView.RowFilter = "email = '" + email + "'");
datatablelist.Add(result.DefaultView.ToTable());
}
As a side-note if you split the data into multiple data tables you loose the ability to easily query and manipulate all rows together. Because of this splitting the data into parts is useful only in quite rare situations. If the reason is showing smaller portions of data in UI you can always use filters for that.
Links:
-
DataView.RowFilter[
^]
-
DataView.ToTable[
^]