LINQ Получают Отличные значения и СПИСОК заливки

Я предложил бы идти для истраченного Мини-Mac и лучший монитор, можно вписаться бюджет.

Принимают во внимание, что и iMac и Мини-Mac являются по существу ноутбуками (с точки зрения их внутренних компонентов). По общему признанию iMac имеет большой экран (когда ноутбуки идут), и надлежащий жесткий диск.

20
задан scarpacci 23 November 2009 в 23:23
поделиться

4 ответа

По любой причине, чтобы просто не выполнять проекцию после отдельного, вам может понадобиться 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();
}
24
ответ дан 30 November 2019 в 00:31
поделиться

Из вашего вопроса не ясно, является ли количество значением в вашей таблице данных или количеством дубликатов для данного элемента, как в ответе 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 .

5
ответ дан 30 November 2019 в 00:31
поделиться

Я уверен, что вы могли бы просто сделать это ...

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();
1
ответ дан 30 November 2019 в 00:31
поделиться

Вы могли бы использовать 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; }
}
1
ответ дан 30 November 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: