Ado.Net实体框架,linq:选择多个表

时间:2009-05-29 16:31:39

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

我在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;

表之间的关系是:

DataBase Model

我使用puntoInteresID和idiomaCliente来检索来自DetalleContenido和Archivo的所有行,这些行是PuntoInteres的一部分但是这句话Archivo总是空的!

sql sentece等价是:

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?

谢谢!

4 个答案:

答案 0 :(得分:1)

您也可以

.Load()

关于所选对象的“参考”特性(当您使用它们时)。

但是对于你的查询,似乎你的Archivo表是1到多,你不能“包含”或“加载”方面的“很多”方面。你会不得不做一个“选择dc.Archivo”。我想。

答案 1 :(得分:0)

您是否尝试过使用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;

答案 2 :(得分:0)

怎么样:

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;

答案 3 :(得分:0)

我的解决方案:

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

谢谢!