EF Core 5.0.2 - 组加入计数

EF Core 5.0.2 - Group Join Count

我知道已经有一些关于此的主题,但 none 似乎可以帮助或解决我的问题。我正在尝试执行具有一对多关系的查询并简单地提供一个计数。我试过以多种方式编写此查询,但似乎无法正常工作。我正在使用 EF Core 5.0.2。

示例: 我以前用过这个,它奏效了。自从我更改为 NET5 后,现在似乎没有了。

var query = (from p in _db.Devices
join variant in _db.DeviceVariations.DefaultIfEmpty() on p.Id equals variant.DeviceID
into variants
select new DeviceBasicView.Model
{
    DeviceID = p.Id,
    DeviceName = p.DeviceName,
    DeviceType = p.DeviceTypeIdentifier,
    Manufacturer = p.DeviceManufacturer,
    Status = p.Status,
    VariantCount = variants.Count()
}).ToList();

我也试过以下方法,没有将整个数据集拉入内存,我不知道如何让它工作。任何帮助,将不胜感激。即使这意味着将我的实体 类 更改为具有 ICollections? (我对 EF Core 有点陌生,通常使用 EF6)

var test = (from p in _db.DeviceVariations.Include("Device")
group p by new { p.Device } into deviceGrouped
select new
{
    Device = deviceGrouped.Select(s => s.Device),
    Variants = deviceGrouped.Count()
}).ToList();


var query2 = (from p in _db.Devices
join s in _db.DeviceVariations on p.Id equals s.DeviceID 
into variants
from s in variants.DefaultIfEmpty()
group s by new { s.DeviceID } into deviceGrouped
select new
{
    Device = deviceGrouped.Select(s => s.Device),
    Variants = deviceGrouped.Count()
}).ToList();

在这里求助post,我刚刚设法解决了它。我将以下内容添加到我的设备实体中(我的变体实体中已经有 FK 引用)并修改了我的查询,如下所示。猜猜我只需要完全映射关系。

设备实体

 public List<DeviceVariationEntity> Variants { get; set; }

变体实体

  [ForeignKey("DeviceID")]
  public DeviceEntity Device { get; set; }

工作查询[=​​24=]

var query = (from p in _db.Devices.Include("Variants")                                         
select new DeviceBasicView.Model
{
   DeviceID = p.Id,
   DeviceName = p.DeviceName,
   DeviceType = p.DeviceTypeIdentifier,
   Manufacturer = p.DeviceManufacturer,
   Status = p.Status,
   VariantCount = p.Variants.Count()
 }).ToList();