【问题标题】:Particular Query in Linq It does not perform the same thing as an inner join in SQL ServerLinq 中的特定查询它不执行与 SQL Server 中的内部联接相同的事情
【发布时间】:2020-12-30 14:47:55
【问题描述】:

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

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,
                 };

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

【问题讨论】:

  • 你在使用实体框架吗?如果是这样,您不需要在 Linq 中使用join,只需使用导航属性即可。
  • 请贴出EF生成的SQL。您可以使用IQueryable&lt;T&gt;.ToString()Db.Database.Log 看到它。

标签: c# linq sql-server-2012


【解决方案1】:

更好的主意:将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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多