У меня есть таблица базы данных для соединения данных между пользователем и клиентами.
db: class UserClientCorporate{
int UserId;
User User;
int ClientCorporateId;
ClientCorporate ClientCorporate;
}
Я хочу запросить, чтобы получить список ClientCorporates
, сгруппированный по userid
. Я следовал некоторым примерам переполнения стека, например Group by в LINQ
, и вот мой запрос:
var data3 = from db in _context.UserClientCorporate
group db.ClientCorporateId by db.UserId into g
select new { UserId = g.Key, Clients = g.ToList() };
return Ok(await data3.ToListAsync());
Когда я запустил это, я получил ошибку:
ошибка: Microsoft.AspNetCore.Server.Kestrel [13] Идентификатор соединения "0HLT67LJQA4IP", Идентификатор запроса "0HLT67LJQA4IP: 0000000F": приложение выдало необработанное исключение. System.InvalidOperationException: не удалось перевести выражение LINQ «ToList (GroupByShaperExpression: KeySelector: u.UserId, ElementSelector: ProjectionBindingExpression: EmptyProjectionMember)». Либо переписать запрос в форме, которую можно перевести, либо явно переключиться на оценку клиента, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList (), либо ToListAsyn c (). См. https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации.
Как решить эту проблему?
решено! После того, как я провел дополнительные исследования, кажется, что EF Core имеет ограничение при выполнении этого запроса на сервере базы данных. поэтому мне нужно сначала получить данные и обработать их на моем сервере do tnet (клиент).
Вот это
var data = await _context.UserClientCorporate.Include(x => x.User).Include( x => x.ClientCorporate).
var res2 = from db in data
group db by db.UserId into g
select new {UserId = g.Key, Clients = g};