[英]LINQ group by in Entity Framework Core 3.1
我有一個數據庫表來連接用戶和客戶端之間的數據。
db: class UserClientCorporate{
int UserId;
User User;
int ClientCorporateId;
ClientCorporate ClientCorporate;
}
我想查詢以獲取按userid
分組的ClientCorporates
列表。 我在 LINQ 中遵循了諸如Group by 之類的 Stack Overflow 上的一些示例
這是我的查詢:
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] 連接 ID“0HLT67LJQA4IP”,請求 ID“0HLT67LJQA4IP:0000000F”:應用程序引發了未處理的異常。 System.InvalidOperationException: 無法翻譯 LINQ 表達式“ToList(GroupByShaperExpression: KeySelector: u.UserId, ElementSelector:ProjectionBindingExpression: EmptyProjectionMember)”。 以可翻譯的形式重寫查詢,或通過插入對 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的調用顯式切換到客戶端評估。 有關詳細信息,請參閱https://go.microsoft.com/fwlink/?linkid=2101038 。
如何解決這個問題呢?
解決了 ! 在我做了更多研究之后,似乎 EF Core 在數據庫服務器上執行此查詢有限制。 所以我需要先獲取數據並在我的 dotnet 服務器(客戶端)上處理它。
這里是
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};
.netcore 3.1 不支持客戶端 GroupBy
您可以像這樣簡單地編寫查詢:
var data3 = __context.UserClientCorporate.ToList().GroupBy(x => x.UserId);
C# 中的代碼編寫者是客戶端。
刪除這個.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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.