emptyprojectionmember' 不在字典中

问题描述 投票:0回答:1

我最近将运行 Entity Framework Core 2.1.1 的应用程序升级到 Entity Framework Core 7.0.11。

以下部分代码(C#)在旧版本中运行良好:


 var items = _dbContext.Contacts
                       .Where(c => (c.UserId == userId));

 items = qitems.GroupBy(c => c.ContactId).Select(c => c.First());

items = items.OrderBy(c => c.CompanyName);
items = items.Skip(skip).Take(pageSize).ToList(); 

//以上操作是针对数据库上下文执行的

但是升级后,我收到此错误:

System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键“emptyprojectionmember”。

我期望相同的代码应该像以前一样运行。

entity-framework-core .net-7.0 ef-core-7.0
1个回答
0
投票

这是一个分组和查询后的示例(抱歉,我没有采用您的代码来解决这个问题,请在最后找到解释)。

LINQ(到 SQL)

var serviceDues =
    (from due in dbx.ServiceDues
     group due by due.ServiceProviderId
     into g
     select g.OrderByDescending(g => g.DueDate).First()
    ).AsEnumerable();

if (selectedMonths != null)
{
   serviceDues = serviceDues
       .Where(x => selectedMonths.Contains(x.DueDate.Month));
}

LINQ(到实体)

var serviceDues = dbx.ServiceDues
    .GroupBy(x => x.ServiceProviderId)
    .Select(x => x.OrderByDescending(u => u.DueDate).First())
    .AsEnumerable();
if (selectedMonths != null)
{
    serviceDues = serviceDues        
        .Where(x => selectedMonths.Contains(x.DueDate.Month));
}

说明:

  • dbx.ServiceDues 是一个包含服务到期金额、到期日期和服务提供商 ID 号的表。该表保存多个月/年和服务提供商记录。
  • selectedMonths 是保存月份数字的整数列表(来自 UI 选择)。

目标是选择指定月份的到期记录;过去、现在或未来。

© www.soinside.com 2019 - 2024. All rights reserved.