2014-12-11 2 views
0

У меня есть список форм, и в этом списке форма с тем же Заголовком обозначает другую версию этой формы, один с ближайшим Creation Время (DateTime тип) - более новая версия.Возьмите последний п элементы из сгруппированных и упорядоченного списка с помощью Entity Framework

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

List<Forms> dbResult = entities.Forms.OrderByDescending(e => e.CreationDate) 
            .GroupBy(e => e.Title) 
            .SelectMany(e => e.Take(n)) 
            .ToList(); 

Куда я иду не так?

ответ

2

Попробуйте это:

var result = entities.Forms 
      .GroupBy(x => x.Title) 
      .SelectMany(g => g.OrderByDescending(v => v.CreationDate).Take(1)); 

Это вернет вам форму таким же название с максимальной CreationDate. Вы можете выполнить дополнительную фильтрацию, чтобы взять n элементов и заказать их каким-либо образом.

+0

Спасибо большое, отлично работал. Я использовал его как; 'Список dbResult = entity.Forms.GroupBy (e => e.Title). ВыберитеMany (e => e.OrderByDescending (e => e.CreationDate) .Take (3)). ToList();' Можете ли вы рассказать мне о порядке использования в selectMany? – Sarge

+1

Комбинация SelectMany и OrderBy - это внутренний выбор для получения элемента с max CreationDate. Поэтому не уверен, что вам следует «взять (3)» там. Я бы сделал еще один. После (Select) выберите 3 (3), чтобы получить только 3 формы. – Enes

+0

Это сработало так, как я хотел, спасибо за объяснение. – Sarge

Смежные вопросы