|
Linq for SQLite: Left join с несколькими условиями
|
|||
---|---|---|---|
#18+
Дано: Есть 2-е модели: Валюта и История курса валют. Выборка делается из истории "на дату". Но дата, за которую делается выборка может быть хоть прошлого века, то есть в истории могут не содержатся данные о курсах валют. И в Истории могут быть записи, а может их вообще не быть. Получить: Выборку Валют с Историей (курсами) на дату. То есть надо использовать Left Join с дополнительными условиями Модели. Валюта: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
История курса валют: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Запрос: Код: c# 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
SQLite выдаёт ошибку: apply joins are not supported Ошибку получаю из-за под-запроса в Left Join-e. То есть нельзя в Linq for SQLite делать под-запросы. Подскажите, можно ли как-то по другому переписать запрос? Может я сделал ошибку где-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2015, 09:56 |
|
Linq for SQLite: Left join с несколькими условиями
|
|||
---|---|---|---|
#18+
potkinДано: Есть 2-е модели: Валюта и История курса валют. Выборка делается из истории "на дату". Но дата, за которую делается выборка может быть хоть прошлого века, то есть в истории могут не содержатся данные о курсах валют. И в Истории могут быть записи, а может их вообще не быть. Получить: Выборку Валют с Историей (курсами) на дату. То есть надо использовать Left Join с дополнительными условиями Модели. Валюта: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
История курса валют: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Запрос: Код: c# 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
SQLite выдаёт ошибку: apply joins are not supported Ошибку получаю из-за под-запроса в Left Join-e. То есть нельзя в Linq for SQLite делать под-запросы. Подскажите, можно ли как-то по другому переписать запрос? Может я сделал ошибку где-то? Безотносительно заморок с соединениями - в данном случае можно (и нужно) вычислить дату заранее и передать её в запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2015, 07:46 |
|
Linq for SQLite: Left join с несколькими условиями
|
|||
---|---|---|---|
#18+
Не увидел корреляционого подзапроса. Его можно переписать так: history.groupby(x=>x.id).Select(x=>x.Key,x.Max(z=>z.Date)) И соединить уже с этим анонимным классом. Не знаю, как переварит это sqlite провайдер - всегда (условно) можно вытащить на клиент и вертеть результат уже как хочешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2015, 08:02 |
|
Linq for SQLite: Left join с несколькими условиями
|
|||
---|---|---|---|
#18+
Monochromatiqueможно (и нужно) вычислить дату заранее и передать её в запрос. Для каждой записи дата будет своя. То есть "Максимальных Дат" будет много - для каждой валюты своя. Monochromatiquegroupby Не хочу связываться с "groupby", у меня ещё есть табличка с товарами - там более 200 000 товаров и истории цен более 3 млн, одновременных пользователей минимум 30. Не потянет. Лучше под-запрос. Но я попробую ... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2015, 12:48 |
|
|
start [/forum/topic.php?fid=17&fpage=12&tid=1349488]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 236ms |
total: | 361ms |
0 / 0 |