LINQ группируется в Entity Framework Core 3.1 - PullRequest
1 голос
/ 31 января 2020

У меня есть таблица базы данных для соединения данных между пользователем и клиентами.

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};

1 Ответ

0 голосов
/ 31 января 2020

Удалить это .ToList () :

var data3 = from db in _context.UserClientCorporate
            group db.ClientCorporateId by db.UserId into g
            select new { UserId = g.Key, Clients = g };

return Ok(await data3.ToListAsync());
...