Я предложил бы идти для истраченного Мини-Mac и лучший монитор, можно вписаться бюджет.
Принимают во внимание, что и iMac и Мини-Mac являются по существу ноутбуками (с точки зрения их внутренних компонентов). По общему признанию iMac имеет большой экран (когда ноутбуки идут), и надлежащий жесткий диск.
По любой причине, чтобы просто не выполнять проекцию после отдельного, вам может понадобиться AsEnumerable () после Distinct, но это не имеет большого значения.
public static List<StudentData> LinqDistinct(DataTable dt)
{
DataTable linqTable = dt;
return
(from names in dt.AsEnumerable()
select new {
FirstName = names.Field<string>("FirstName"),
LastName = names.Field<string>("LastName")
}).Distinct().Select(x =>
new StudentData() { FirstName=x.FirstName, LastName=x.LastName})
.ToList();
}
Из вашего вопроса не ясно, является ли количество значением в вашей таблице данных или количеством дубликатов для данного элемента, как в ответе Ecyrb. Однако, если ваш класс StudentData
реализует IEquatable
или переопределяет метод Equals, это должно работать:
public static List<StudentData> LinqDistinct(DataTable dt)
{
return dt.AsEnumerable()
.Select(row => new StudentData
{
FirstName = row.Field<string>("FirstName"),
LastName = row.Field<string>("LastName"),
Qty = row.Field<int>("Qty")
})
.Distinct()
.ToList();
}
Если StudentData
не поддерживает сравнение значений , и вы не можете добавить эту поддержку в класс, возможно, вам придется создать реализацию IEqualityComparer
и передать ее в метод Distinct
.
Я уверен, что вы могли бы просто сделать это ...
List<StudentData> sList = (from names in dt.AsEnumerable().Distinct() // I am not sure if you even have to call AsEnumerable()
select new StudentData() {
FirstName = names.Field<string>("FirstName"),
LastName = names.Field<string>("LastName")
}).ToList();
Вы могли бы использовать GroupBy
:
public static List<StudentData> LinqDistinct(DataTable dt)
{
List<StudentData> results = dt.AsEnumerable()
.GroupBy(row =>
{
FirstName = row.Field<string>("FirstName"),
LastName = row.Field<string>("LastName")
})
.Select(group => new StudentData
{
FirstName = group.Key.FirstName,
LastName = group.Key.LastName,
Qty = group.Count()
})
.ToList();
return results;
}
class StudentData
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Qty { get; set; }
}