簡體   English   中英

Entity Framework Core 3.1 中的 LINQ group by

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM