Linq 中的特定查询它与 SQL 服务器中的内部联接执行的操作不同

Particular Query in Linq It does not perform the same thing as an inner join in SQL Server

正在执行此查询以从相应的产品相关 table 中获取区域和类别名称。

SELECT
    Categoria.NombreCategoria,
    Zona.ZonaGrupo,
    p.NombreProducto,
    p.ProductoTiene,
    p.RealizadosEvento,
    p.FechaInicial,
    p.FechaFin 
FROM
    Productos p
INNER JOIN
    Categoria ON p.CategoriaId = Categoria.Id 
INNER JOIN
    Zona ON p.ZonaId = Zona.ZonaId

SQL 查询的结果 returns 产品 table 必须具有的 1000 条记录及其区域和类别。

在 linq 中执行以下操作时,returns 只有 8 条记录 ...

IQueryable<ProductosViewModel> ProductosMaped = 
      from p in Db.Productos
      join g in Db.Zona on p.ZonaId equals g.ZonaId
      join acr in Db.Categoria on p.CategoriaId equals acr.Id
      select new ProductosViewModel
                 {
                     Categoria        = acr.NombreCategoria,
                     ZonaGrupo        = g.ZonaGrupo,
                     NombreProducto   = p.NombreProducto,
                     ProductoTiene    = p.ProductoTiene,
                     RealizadosEvento = p.RealizadosEvento,
                     FechaInicial     = p.FechaInicial,
                     FechaFin         = p.FechaFin,
                 };

我只需要 link 这 2 个 table,这样列表就只显示 CategoryName 和 ZoneName 或 Group Zone。

更好的主意:将 Include 与导航属性一起使用:

List<ProductosViewModel> list = await this.Db.Productos
    .Include( p => p.Zona )
    .Include( p => p.Categoria )
    .Where( p => p.Categoria != null && p.Zona != null ) // <-- This step may be optional depending on your database.
    .Select( p => new ProductosViewModel
    {
        Categoria        = p.Categoria.NombreCategoria,
        ZonaGrupo        = p.Zona.ZonaGrupo,
        NombreProducto   = p.NombreProducto,
        ProductoTiene    = p.ProductoTiene,
        RealizadosEvento = p.RealizadosEvento,
        FechaInicial     = p.FechaInicial,
        FechaFin         = p.FechaFin,
    } )
    .ToListAsync()
    .ConfigureAwait(false);