2012-04-11 3 views

ответ

19
var latest = model.OrderByDescending(m => m.Date).FirstOrDefault(); 
+0

Результат не будет «DateTime». – Guffa

+0

@ Guffa действительно исправил это – ionden

+0

См. Также MaxBy() в библиотеке [morelinq] (http://code.google.com/p/morelinq/) Jon Skeet –

0

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

DateTime maxDate = FooCollection.Max(f=>f.Date) 
+1

«получить Foo с последней датой», а не «получить последнюю дату» – AakashM

3

Учитывая, что вы не предоставили никакой информации о наименовании ваших сущностей (я предполагаю, что foos здесь); что-то вроде этого:

var latest = foos.OrderByDescending(f => f.Date).FirstOrDefault(); 

И если есть более чем один с датой макс (я знаю, что ты сказал 'The Foo с последним ... но я не знаю, разрешение вашего времени здесь), чем вы действительно будете после чего-то более похожего на ответ Гуффа.

Помните, что любое решение будет полезно в массовом порядке из индекса в столбце даты. Если индекс отсутствует и таблица становится большой? Тогда это может быть очень медленно.

+0

Я думал о линиях чего-то типа foos.Where (f => f.Date IsLatest). Я на самом деле пытался использовать ее в шаблоне спецификаций, и мне нужно, чтобы это было логическое выражение. – evablack

+0

Да, но это даже не C#, поэтому он не будет компилироваться, я уверен, вы тоже это знаете. Я не уверен, что есть реальная * польза *, которую можно было бы обернуть EF таким же образом. Разумеется, проще всего использовать метод ярлыков для вашего класса ObjectContext «GetLatestFoo», который делает что-то подобное выше? –

2

Для того, чтобы выражение, которое определяет, если дата является последним, что вам нужно знать последнюю дату, а именно:

DateTime latestDate = items.Max(f => f.Date); 

var latestItems = items.Where(f => f.Date == latestDate); 

Другой подход будет сортировать элементы:

var latestItem = items.OrderBy(f => f.Date).First(); 

Или использовать Aggregate:

var latestItem = items.Aggregate((d, v) => v.Date > d.Date ? v : d); 
+0

Я думаю, вы могли бы означать 'Foo.Where (f => f.Date == lastDate);' :) –

+1

@AndrasZoltan: Да, вы правы. Спасибо, что поймал это. – Guffa

0

Вы можете попробовать следующий код:

List<Foo> fooList = new List<Foo>(); 

// add the Foo instance in list here 
// then apply following to take latest 

fooList.OrderByDescending(p => p.Date).Take(1); 
Смежные вопросы