Ваша проблема в том, что у вас нет правильной спецификации
Мне нужно упорядочить список DemoInfo по дате создания
Вы не можете этого сделать, потому что DemoInfo
не имеет CreatedDate
. Если вы предполагаете, что DemoInfo
был создан в тот день, когда он получил свой первый StatInfo
, то вы можете использовать самый старый StatInfo
для заказа:
Мне нужно упорядочить мою последовательность DemoInfo
в порядке возрастания по дате ее создания, которая определяется как дата его самой старой StatInfo
.
Это все еще имеет проблему: что такое CreatedDate
DemoInfo
после того, как все его StatInfos
удалены? И удаление самого старого StatInfo
из DemoInfo
со многими StatInfos
внезапно меняет CreatedDate
из DemoInfo
.
Но давайте предположим, что это не проблема для вас, и вы хотите, чтобы все DemoInfo
без StatInfo
последнего в вашем результате (потому что они получат свои CreationDate
в будущем, когда он получит свой первый StatInfo
. Ваш запрос будет выглядеть так:
var result = myDemoInfos.Select(demoInfo => new
{
DemoInfo = demoInfo,
// if the demoInfo has a non-null stat and a non-empty stat
// order it by ascending StatInfo.CreatedDate, and take the first
// otherwise use DateTime.MaxValue (Created in far future)
CreationDate = ( (demoInfo.stat != null) && (demoInfo.stat.Any()) ?
demoInfo.Stat
.Select(statInfo => createdDate)
.OrderBy(createdDate => createdDate)
.First() : // you know there is a first, you just checked Any()
DateTime.MaxValue, // if there is no First, take far future
})
.OrderBy(item => item.CreationDate)
.Select(item => item.DemoInfo);
Это может быть умнее: вам не нужно сортировать все созданные даты, вам нужна только созданная дата с наименьшим счетом TickCount:
TickCount = ( (demoInfo.stat != null) && (demoInfo.stat.Any()) ?
demoInfo.stat.Select(statInfo => statInfo.createdDate.TickCount).Min() :
DateTime.MaxValue.TickCount,
и сортировка по возрастанию TickCount