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
查看它。