LinqToDb:Rank 是服务器端方法

LinqToDb: Rank is server-side method

我正在尝试将 linq2db.EntityFrameworkCore 用于它的某些窗口函数,例如 RANK()

下面是我的实现:

var abc = (from tl in _repo.Context.TransferLink
                 join tlt in _repo.Context.TransferLinkType on new { TLinkId = tl.TransferLinkTypeId, EType = "Deviance" } equals new { TLinkId = tlt.TransferLinkTypeId, EType = tlt.EnumTransferLinkType }
                 //let duplicateCount = _repo.Context.TransferLink.Where(tl1 => tl1.SecondaryTransferId != null && tl.SecondaryTransferId != null &&
                 //tl1.SecondaryTransferId == tl.SecondaryTransferId.Value).Count()
                 where
                   (allTransferIds.Contains(tl.PrimaryTransferId) || allTransferIds.Contains(tl.SecondaryTransferId)) &&
                   !tl.Archived
                 select new
                 {
                     TransferLinkId = tl.TransferLinkId,
                     TransferLinktypeId = tl.TransferLinkTypeId,
                     PrimaryTransferId = tl.PrimaryTransferId,
                     SecondaryTransferId = tl.SecondaryTransferId,
                     DuplicateCount = Sql.Ext.Count(tl.TransferLinkId)
                                          .Over()
                                          .PartitionBy(tl.SecondaryTransferId)
                                          .ToValue()
                     UpdatedDate = tl.UpdatedDate,
                     RankVal = Sql.Ext.Rank()
                                  .Over()
                                  .PartitionBy(tl.TransferLinkTypeId, tl.SecondaryTransferId)
                                  .OrderByDesc(tl.UpdatedDate)
                                  .ThenBy(tl.TransferLinkId)
                                  .ToValue()
                 }).ToList();

此代码抛出异常:

Rank is server-side method

我曾尝试寻找解决方案,但找不到。

有什么想法吗?

要使用 linq2db.EntityFrameworkCore,您必须切换到库的 LINQ 提供程序。可以通过简单的 ToLinqToDB() 调用来完成。

var query = /* some EF Core query */

query = query.ToLinqToDB();

var result = query.ToList();