提问者:小点点

Linq中的特定查询它执行的操作与sql server中的内部联接不同


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

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,

                                     };

我只需要链接这两个表,这样列表只显示我CategoryName和ZoneName或Group zone。


共1个答案

匿名用户

更好的想法:将与导航属性一起使用:

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);