|
|
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
Помогите, плиз с LINQ... есть список классов: авторclass record { Date Date1; int Num; } List<record> records = new List<record>(); Мне нужно найти число, соответствует максимальной дате, но не больше заданной. Сейчас я это сделал так: авторvar rec = from a in records where a.Date1 <= date select new { a.Date1, a.Num }; if (rec.Count() > 0) { var maxDate = rec.Max(p => p.Date1); var recMax = rec.First(p => p.Date1 == maxDate); result = recMax.Num; } Вопрос: может быть эту задачу можно решить как-то проще? Мне кажется, что у меня слишко мудреный код получается... Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 11:11 |
|
||
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
Robin-Bobin Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. _______________ AnimeBay - аниме магазин, который Вас не разочарует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 11:39 |
|
||
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
WYPMAH, Спасибо большое за ответ. По поводу следующего блока у меня сразу 2 вопроса: Код: plaintext 1. если не будет найдено ни одной записи с датой меньше заданной, то не будет эксепшена при .Max() ? 2. Как система понимает, что надо находить максимальное значение именно по дате, а по номеру? в .Max() никакого упоминания о дате нет... P.S. К сожалению VS у меня сейчас нет, поэтому на практике проверить не могу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 12:39 |
|
||
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
Robin-Bobin1. если не будет найдено ни одной записи с датой меньше заданной, то не будет эксепшена при .Max() ? нет, не будет, findOne в итоге будет равен null. Robin-Bobin2. Как система понимает, что надо находить максимальное значение именно по дате, а по номеру? в .Max() никакого упоминания о дате нет... мой класс Record реализует интерфейс IComparable , который и используется в Max(). _______________ AnimeBay - аниме магазин, который Вас не разочарует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 12:53 |
|
||
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
WYPMAH, Спасибо большое! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 13:09 |
|
||
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
WYPMAH, Как вариант: var result = list.Where(x => x.Date <= specDate).OrderByDescending(x => x.Date).FirstOrDefault(); чтобы IComparable не реализовывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 21:25 |
|
||
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
Я тоже не вижу смысла в имплементации IComparable, ибо компариться может любой член класса, тот же Num. Правильнее, написать линк-запрос, а не фиксить класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 21:34 |
|
||
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
Abbey Road, МСУ, Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2010, 01:29 |
|
||
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
А как будет быстрее работать: использовать OrderByDescending (по нужному полю), а потом брать первый элемент из получившегося списка или же выполнить функцию Max (по нужному полю) и взять получившийся элемент? Или же однофигственно?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2010, 01:55 |
|
||
|
Вопрос по LINQ
|
|||
|---|---|---|---|
|
#18+
Robin-BobinА как будет быстрее работать: использовать OrderByDescending (по нужному полю), а потом брать первый элемент из получившегося списка или же выполнить функцию Max (по нужному полю) и взять получившийся элемент? Или же однофигственно?) А самому замерить слаб о ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2010, 10:23 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=36419965&tid=1351495]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 345ms |

| 0 / 0 |
