Структура сущности Ado.Net, linq: выбор таблиц - PullRequest
2 голосов
/ 29 мая 2009

Я использую это предложение в 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 предложения:

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 ]

1 голос
/ 29 мая 2009

Вы также можете сделать

.Load()

на «эталонном» качестве выбранного объекта (когда вы его используете).

Но что касается вашего запроса, то, похоже, ваша таблица Archivo имеет значение 1 ко многим, и вы не можете "включить" или "загрузить" "многие" стороны уравнения. Я бы подумал, что вам нужно сделать «select dc.Archivo».

0 голосов
/ 30 мая 2009

Мое решение:

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

Спасибо!

0 голосов
/ 30 мая 2009

как насчет:

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 голосов
/ 29 мая 2009

пробовали ли вы использовать оператор 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;
...