Как не печатать дубликаты в виде сетки данных с помощью LINQ - PullRequest
1 голос
/ 28 марта 2011

У меня есть таблица под названием ВРЕМЯ, и в ней несколько студентов.Иногда ученик А может иметь более одной записи во ВРЕМЕНИ.Как распечатать только последнюю запись для ученика А?

Ответы [ 4 ]

2 голосов
/ 28 марта 2011

Вам нужен последний ученик А? .. Тогда, может быть, вам нужно что-то вроде этого:

dataGridView.DataSource = students.GroupBy(s => s.Name).
Select(i => i.OrderByDescending(s => s.DateChanged).First());

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

0 голосов
/ 28 марта 2011

Вы должны сгруппировать записи по времени поступления студентов.

from r in StudentRecords
group r by r.StudentId into g
select new { StudentId = g.Key, MostRecentEntry = g.Max(e => e.EntryTime)}

поскольку я не знаю вашу схему, я использовал несколько произвольных имен

0 голосов
/ 28 марта 2011
void Main ()
{

    var rows = new [] {
        new Student { Name = "A", Timestamp = DateTime.Now.AddHours (-1) },
        new Student { Name = "A", Timestamp = DateTime.Now.AddHours (-3) },
        new Student { Name = "B", Timestamp = DateTime.Now.AddHours (4) },
        new Student { Name = "B", Timestamp = DateTime.Now.AddHours (1) },
        new Student { Name = "B", Timestamp = DateTime.Now }
    };

    var recentRows = from row in rows
        group row by row.Name into studentRows
        select studentRows.OrderByDescending (sr => sr.Timestamp).First ();

    Console.WriteLine (recentRows);
}


class Student {
    public string Name { get; set; }
    public DateTime Timestamp { get; set; }
}
0 голосов
/ 28 марта 2011

В этом примере используется Distinct для удаления повторяющихся элементов в последовательности факторов 300.

public void Linq46()
{
    int[] factorsOf300 = { 2, 2, 3, 5, 5 };

    var uniqueFactors = factorsOf300.Distinct();

    Console.WriteLine("Prime factors of 300:");
    foreach (var f in uniqueFactors)
    {
        Console.WriteLine(f);
    }
}

Результат

Основные факторы 300: 2 3 5
Смотри: http://msdn.microsoft.com/en-us/vcsharp/aa336761.aspx#distinct1

...