在我們升級之前,此查詢運行良好:
var appUsers = await _masterDbContext
.Users
.Include(x => x.UserCustomers)
.AsNoTracking()
.Select(AppUserDto.Projection)
.Where(user => !user.IsDeleted && user.UserCustomers.Any(x => x.CustomerId == tenant.Id && x.UserId == user.Id))
.DistinctBy(x => x.Id)
.ToDataSourceResultAsync(request.GridOptions, cancellationToken: cancellationToken);
我們現在收到錯誤:
Either rewrite the query in a form that can be translated,
or switch to client evaluation explicitly by inserting a call to 'AsEnumerable',
'AsAsyncEnumerable', 'ToList', or 'ToListAsync'.
看來 DistinctBy 是違規者,但對 LINQ 來說相當新,我不知道如何重寫它以使其作業。
uj5u.com熱心網友回復:
更改DistinctBy并Distinct()移動 that 和 . 之前的謂詞Select。我也向上移動AsNoTracking()了:
var appUsers = await _masterDbContext
.Users
.AsNoTracking()
.Include(x => x.UserCustomers)
.Where(user =>
!user.IsDeleted
&& user.UserCustomers
.Any( x => x.CustomerId == tenant.Id ) )
.Distinct()
.Select(AppUserDto.Projection)
.ToDataSourceResultAsync(request.GridOptions, cancellationToken: cancellationToken);
uj5u.com熱心網友回復:
看起來您已從 EF Core 2.x 升級,它將完整過濾集加載到記憶體中。DistinctByEF Core 6 無法翻譯。
嘗試以下解決方案:
var filtered = _masterDbContext.Users
.Select(AppUserDto.Projection)
.Where(user => !user.IsDeleted && user.UserCustomers.Any(x => x.CustomerId == tenant.Id && x.UserId == user.Id));
var query =
from d in filtered.Select(d => new { d.Id }).Distinct()
from u in filtered.Where(u => u.Id == d.Id).Take(1)
select u;
var appUsers = await query.ToDataSourceResultAsync(request.GridOptions, cancellationToken: cancellationToken);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416946.html
標籤:
上一篇:LINQ查詢不在
