2009-01-06 14 views
29

Tengo la siguiente consulta de linq para las entidades. El problema es que parece que no carga la relación "Etiquetas" aunque he incluido algo para ello. Funciona bien si no me uno a las etiquetas, pero necesito hacerlo.Unirse e incluir en Entity Framework

  var items = from i in db.Items.Include("Tags") 
         from t in i.Tags 
         where t.Text == text 
         orderby i.CreatedDate descending 
         select i; 

¿Hay alguna otra manera de formular esta consulta? Tal vez dividirlo o algo?

Respuesta

50

Bueno, el Incluir contradice el dónde. Incluir dice, "Cargar todas las etiquetas". Donde dice: "Cargar algunas etiquetas". Cuando hay una contradicción entre la consulta y Include, la consulta siempre ganará.

Para volver todas las etiquetas decualquier elemento conal menos una etiqueta de texto ==:

 var items = from i in db.Items.Include("Tags") 
        where i.Tags.Any(t => t.Text == text) 
        orderby i.CreatedDate descending 
        select i; 

(no probado, ya que no tengo su base de datos/modelo)

Aquí está a really good, free book on LINQ.

+0

Cualquier sugerencia sobre cómo escribirlo de alguna otra manera para que pueda obtener las etiquetas y hacer una condición sobre ellas. Sería algo simple en SQL regular. – Olaj

+0

¿Desea incluir TODAS las etiquetas de CUALQUIER elemento con AL MENOS una etiqueta == texto? –