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

问题描述 投票:2回答:4

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

谢谢!

c# entity-framework ado.net linq-to-entities
4个回答
1
投票

你也可以

.Load()

在所选对象的“引用”属性上(当您使用它们时)。

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


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;

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;

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

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.