|
ef core, linq GroupBy
|
|||
---|---|---|---|
#18+
Добрый день. EF core 3.1 , Pomelo.EntityFrameworkCore.MySql Есть вот такой код Код: c# 1.
При попытке выполнения падает с ошибкой "Client side GroupBy is not supported" Но при этом вот такой код Код: c# 1. 2.
нормально строит sql и выполняется. ToDictionary() вместо Select() - тоже падает "Client side GroupBy is not supported" Это какой то баг или я чего то не понимаю ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 12:21 |
|
ef core, linq GroupBy
|
|||
---|---|---|---|
#18+
Shocker.Pro, То есть если я правильно понял ef не может транслировать groupBy() в SQL, а добавление select() позволяет это сделать ? Но если это так - это же как то ужасно не очевидно. А какая еще функциональность спрятана за сложными комбинациями ?? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 12:55 |
|
ef core, linq GroupBy
|
|||
---|---|---|---|
#18+
Ты что хочешь получить в результате группировки? В результате Select ты получаешь проекцию в виде понятного анонимного класса. А после GroupBy ты что хочешь получить? IEnumerable.IGrouping<>? С чем ты хочешь List? Отталкивайся от результата, а не от метода тыка ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 13:34 |
|
ef core, linq GroupBy
|
|||
---|---|---|---|
#18+
Vladimirzzz нормально строит sql и выполняется. ToDictionary() вместо Select() - тоже падает "Client side GroupBy is not supported" Это какой то баг или я чего то не понимаю ? Если ваш LINQ не может транслироваться в SQL на 100%, то будет ошибка. В вашем коде проблема: Vladimirzzz Код: c# 1.
Вы группируете по навигационной сущности и пытаетесь получить группы. В SQL так нельзя. Нужно группировать по полю, и выбирать функцию агрегации (Sum, Count, etc). Когда вы пишите LINQ, представьте себе, как бы в это в SQL транслируете. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 13:36 |
|
ef core, linq GroupBy
|
|||
---|---|---|---|
#18+
Shocker.Pro Ты что хочешь получить в результате группировки? В результате Select ты получаешь проекцию в виде понятного анонимного класса. А после GroupBy ты что хочешь получить? IEnumerable.IGrouping<>? С чем ты хочешь List? Отталкивайся от результата, а не от метода тыка Спасибо. Да я уже понял. Вместо List я пытался использовать ToDictionary и как я понимаю он в отличие от Select IEnumerable хочет, поэтому та же ошибка что и при ToList ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 13:49 |
|
ef core, linq GroupBy
|
|||
---|---|---|---|
#18+
hVostt Вы группируете по навигационной сущности и пытаетесь получить группы. В SQL так нельзя. Нужно группировать по полю, и выбирать функцию агрегации (Sum, Count, etc). Когда вы пишите LINQ, представьте себе, как бы в это в SQL транслируете. Спасибо. Кажется вы не правы. EF core 3 транслирует такой запрос добавляя join для навигационной сущности. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 13:53 |
|
ef core, linq GroupBy
|
|||
---|---|---|---|
#18+
Vladimirzzz Спасибо. Да я уже понял. Вместо List я пытался использовать ToDictionary и как я понимаю он в отличие от Select IEnumerable хочет, поэтому та же ошибка что и при ToList Тебе нужно четко представлять, где у тебя проходит граница между IQueryable и IEnumerable. Неважно, чем ты пытаешься материализовать, ToList или ToDictionary, EF не может сделать запрос ДО материализации, потому что там IQueryableGrouping. Сначала делай проекцию, а потом вызывай материализацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 14:04 |
|
ef core, linq GroupBy
|
|||
---|---|---|---|
#18+
Shocker.Pro Ты что хочешь получить в результате группировки? В результате Select ты получаешь проекцию в виде понятного анонимного класса. А после GroupBy ты что хочешь получить? IEnumerable.IGrouping<>? С чем ты хочешь List? Отталкивайся от результата, а не от метода тыка Хотя, с другой стороны, почему бы мне не получить IGrouping<string, OrderProduct> который я наверно получил бы так: var list = _db.OrderProducts.ToList() var groups = list.GroupBy ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 14:06 |
|
ef core, linq GroupBy
|
|||
---|---|---|---|
#18+
Vladimirzzz почему бы мне не получить IGrouping Хочешь группировку на клиенте - делай на клиенте. Или делай нужную проекцию с сервера, которую можно передать на клиента с помощью SQL-запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 14:27 |
|
|
start [/forum/topic.php?fid=17&fpage=2&tid=1349070]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 147ms |
0 / 0 |