Как я могу заказать несколько товаров с помощью LINQ? - PullRequest
4 голосов
/ 29 июля 2011

У меня есть коллекция, и я пытаюсь взять «последний» элемент в коллекции на основе следующего кода:

 return MyCollection.OrderByDescending(a => a.StartDate).FirstOrDefault(a => a.StartDate.Date <= DateTime.UtcNow.Date));

Это прекрасно работает, но я столкнулся с проблемой, где у меня есть примергде в MyCollection есть две записи с одинаковой датой начала.(поэтому я предполагаю, что произвольно требуется один из них ??)

, чтобы справиться с этой ситуацией, я хочу добавить проверку для этого, чтобы, если есть несколько элементов с одинаковой начальной датой, он затем переходит в другое полерешить, какой из них вернуть, но я не хочу тратить деньги на проверку второго поля, если ситуация не существует.

Ответы [ 4 ]

12 голосов
/ 29 июля 2011

использовать ThenBy() или ThenByDescending()

return MyCollection.OrderByDescending(a => a.StartDate).ThenBy(a=>a.Fish).FirstOrDefault(a => a.StartDate <= DateTime.UtcNow.Date));

Как хотите, товар с самой поздней датой ....

var max=MyCollection.Where(a => a.StartDate.Date <= DateTime.UtcNow.Date).Max(a=>a.StartDate);
result=MyCollection.Where(a=>a.StartDate == max).OrderBy(a=>a.SecondProp).First();
1 голос
/ 29 июля 2011

Если вы используете ThenBy(), оно всегда выполняется. Единственный способ выполнить 'ThenBy' только тогда, когда результат из OrderBy равен, вам нужно написать пользовательский IComparer .

1 голос
/ 29 июля 2011

вы должны найти расширение ThenBy / ThenByDescending.

0 голосов
/ 29 июля 2011

Вы могли бы иметь свой объект, поддерживающий IComparable, поместить свою логику в это, затем просто упорядочить по самому объекту .OrderBy( a => a )

(я думаю, что это работает ... в противном случае вы можете передать объект, который реализует IComparer, в OrderBy)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...