Удалить похожие элементы из списка

1

Следующие данные возвращаются из SQL View:

Name        CandidateID         Filled
Tom Jones   1003436             2014-05-09  07:13:53.087
Tom Jones   1003436             2014-05-09  07:13:18.957
Ed  Harris  1421522             2014-05-09  08:17:20.234

Мне нужен только один рекорд Tom Jones с последним заполненным временем. Как я могу добиться этого в С#/LINQ при получении или после получения данных с сервера?

Теги:
linq
entity-framework
linq-to-entities

3 ответа

5
Лучший ответ

Может быть, что-то вроде этого:

var q = from n in table
        group n by new {n.CandidateID,n.Name} into g
        select new 
        {
            CandidateID = g.Key.CandidateID, 
            Name = g.Key.Name, 
            Filled = g.Max(t=>t.Filled)
        };

Класс тестирования

class Foo
{
    public string Name { get; set; }
    public int CandidateID { get; set; }
    public DateTime Filled { get; set; }
}

Прецедент

var ls=new List<Foo>
    {
        new Foo(){Name="Tom Jones",CandidateID=1003436,
                  Filled=DateTime.Parse("2014-05-09  07:13:53.087")},
        new Foo(){Name="Tom Jones",CandidateID=1003436,
                  Filled=DateTime.Parse("2014-05-09  07:13:18.957")},
        new Foo(){Name="Ed  Harris",CandidateID=1421522,
                  Filled=DateTime.Parse("2014-05-09  08:17:20.234")}
    };
    var q = 
        (from n in ls
        group n by new {n.CandidateID,n.Name} into g
        select new 
        {
            CandidateID = g.Key.CandidateID, 
            Name = g.Key.Name, 
            Filled = g.Max(t=>t.Filled)
        });

Вывод

CandidateID     Name           Filled 
1003436         Tom Jones      09/05/2014 7:13:53 AM 
1421522         Ed  Harris     09/05/2014 8:17:20 AM 
  • 0
    точно такой же кусок кода, который я печатал: D Ура.
  • 0
    Эта связь здесь просто отстой .. ааааааааааааааааа Слава тебе. :)
Показать ещё 5 комментариев
2
var q = from n in table
        group n by n.CandidateID into g
        select g.OrderByDescending(t=>t.Filled).FirstOrDefault();
0

вам нужна группа, как показано ниже

var distinctItems = ls.GroupBy(x => x.CandidateID).Select(y => y.First());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню