2009-05-29 3 views
2

Я использую эти предложения в C# для извлечения данных из таблиц DetalleContenido и Archivo:Ado.Net, LINQ: выберите кратные таблицы

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 http://img9.imageshack.us/img9/4230/modelodatos.png

Я использую puntoInteresID и idiomaCliente для извлечения всех строк из DetalleContenido и Archivo, которые являются частью PuntoInteres, но с этим предложением Archivo всегда имеет значение null!

СКП 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?

Спасибо!

ответ

1

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

.Load() 

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

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

+0

Вы правы. Я использую select new {dc, dc.Archivo} для получения таблицы Archivo. – VansFannel

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

Да, но это не сработает. – VansFannel

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

Я хочу получить DetalleContenido и Archivo. – VansFannel

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

Спасибо!

Смежные вопросы