【问题标题】:Ado.Net entity framework, linq: select multiples tablesAdo.Net 实体框架,linq:选择多个表
【发布时间】:2010-10-29 22:35:10
【问题描述】:

我在 C# 中使用这句话从 DetalleContenido 和 Archivo 表中检索数据:

var detallesContenido =
   from contenido in guiaContext.Contenido
      where contenido.PuntoInteres.id_punto == puntoInteresID
   from dc in contenido.DetalleContenido
      where dc.Idioma.ds_idioma == idiomaCliente
  select dc;

表之间的关系是这样的:

我使用 puntoInteresID 和 idiomaCliente 从 DetalleContenido 和 Archivo 检索属于 PuntoInteres 的所有行,但是这句话 Archivo 始终为空!!

sql语句等价是:

Select dc.ds_nomDetContenido, dc.ds_descDetContenido, ar.archivo
from Contenido c, DetalleContenido dc, Archivo ar, Idioma i
where c.id_punto = puntoInteresID
  and c.id_contenido = dc.id_contenido
  and dc.id_idioma = i.id_idioma
  and i.ds_idioma = idiomaCliente
  and dc.id_archivo = ar.id_archivo;

我如何也可以检索 Archivo?

谢谢!

【问题讨论】:

    标签: c# entity-framework ado.net linq-to-entities


    【解决方案1】:

    我的解决方案:

    var detallesContenido =
       from contenido in guiaContext.Contenido
          where contenido.PuntoInteres.id_punto == puntoInteresID
       from detalleContenido in contenido.DetalleContenido
          where detalleContenido.Idioma.ds_idioma == idiomaCliente
       select new { detalleContenido, detalleContenido.Archivo };
    

    谢谢!

    【讨论】:

      【解决方案2】:

      怎么样:

      var detallesContenido =
        from contenido in guiaContext.Contenido
            where contenido.PuntoInteres.id_punto == puntoInteresID && contenido.DetalleContenido.Any(c=>c.Idioma.ds_idioma == idiomaCliente)
        select contenido.DetalleContenido;
      

      【讨论】:

      • 我想检索 DetelleContenido AND Archivo。
      【解决方案3】:

      你也可以这样做

      .Load()
      

      关于选定对象的“引用”属性(当您使用它们时)。

      但就您的查询而言,您的 Archivo 表似乎是一对多的,您不能“包含”或“加载”等式的“多”方。我认为您必须执行“选择 dc.Archivo”。

      【讨论】:

      • 你是对的。我使用 select new {dc, dc.Archivo} 来获取表 Archivo。
      【解决方案4】:

      您是否尝试过使用 Include() 语句?我认为它看起来像这样

      var detallesContenido =
             from contenido in guiaContext.Contenido.Include("DetalleContenido")
                where contenido.PuntoInteres.id_punto == puntoInteresID
             from dc in contenido.DetalleContenido
                where dc.Idioma.ds_idioma == idiomaCliente
            select dc;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-25
        • 2010-10-26
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-25
        相关资源
        最近更新 更多