C# Linq中的特定查询它执行的操作与SQL Server中的内部联接不同

C# Linq中的特定查询它执行的操作与SQL Server中的内部联接不同,c#,linq,sql-server-2012,C#,Linq,Sql Server 2012,执行此查询是为了从相应的产品相关表中获取区域和类别名称 SELECT Categoria.NombreCategoria, Zona.ZonaGrupo, p.NombreProducto, p.ProductoTiene, p.RealizadosEvento, p.FechaInicial, p.FechaFin FROM Productos p INNER JOIN Categoria ON p.CategoriaI

执行此查询是为了从相应的产品相关表中获取区域和类别名称

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查询的结果返回products表必须具有的1000条记录及其区域和类别

在linq中执行以下操作时,它只返回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,
                 };
IQueryable产品映射=
从p到Db.Productos
在p.ZonaId上的Db.Zona中加入g.ZonaId等于g.ZonaId
将acr加入p.CategoriaId上的Db.Categoria中等于acr.Id
选择新产品查看模型
{
分类=acr.NombreCategoria,
ZonaGrupo=g.ZonaGrupo,
NombreProducto=p.NombreProducto,
productoine=p.productoine,
RealizationDosEvento=p.RealizationDosEvento,
FechaInicial=p.FechaInicial,
FechaFin=p.FechaFin,
};

我只需要链接这两个表,以便列表仅显示CategoryName和ZoneName或Group Zone。

更好的主意:使用
包含导航属性:

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);
List List=等待this.Db.Productos
.包括(p=>p.Zona)
.包括(p=>p.分类)
.Where(p=>p.Categoria!=null和&p.Zona!=null)//新产品视图模型
{
Categoria=p.Categoria.NombreCategoria,
ZonaGrupo=p.Zona.ZonaGrupo,
NombreProducto=p.NombreProducto,
productoine=p.productoine,
RealizationDosEvento=p.RealizationDosEvento,
FechaInicial=p.FechaInicial,
FechaFin=p.FechaFin,
} )
.ToListAsync()
.配置等待(错误);

您正在使用实体框架吗?如果是这样,您不需要在Linq中使用
join
,只需使用导航属性即可。请发布EF生成的SQL。您可以使用
IQueryable.ToString()
Db.Database.Log
查看它。