2012-10-05 73 views
5

Actualmente estoy tratando de hacer una consulta anidada en LINQ, pero estoy recibiendo un mensaje de error:consulta anidada LINQ, mensaje de error

var subcatquery = from categories in mydb.Categories 
        where categories.ParentId == null 
        select new 
        { 
         category = categories.Name, 
         subcat = (from sub in mydb.Categories 
           where sub.ParentId == sub.Id 
           select new 
           { 
            subcatItem = sub.Name, 
            subcatId = sub.Id 
           }) 
        }; 

Resultados Ver = The type '<>f__AnonymousType0<subcatItem,subcatId>' exists in both 'myapplication.dll' and 'System.Web.dll'

No puedo underestand qué ... si elimino la consulta secundaria y la pongo en su cuenta ... está perfectamente bien.

el tipo subcat es un collection<>, ¿es aquí donde está el problema?

class categoryGroup 
    { 
     public string category; 
     public Collection<subcategoryGroup> subcat; 

    } 
    class subcategoryGroup 
    { 
     public string subcatItem; 
     public int subcatId; 

    } 
+0

lo que usted está tratando de hacer así que en subcat? ¿puede por favor elaborarlo ... pensé que podría querer la unión interna i n subcat entre ParentID e Id ... ¿no es así? – Usman

+0

en su consulta secundaria, obtiene el nombre de subcatitem y subcategoría y utiliza en ambas consultas el mismo nombre de tabla ?? – Rajpurohit

+0

@Rajpurohit Sí ... es una tabla relacional que apunta a sí misma. Debo señalar que estoy consultando la misma mesa. – user1655940

Respuesta

1

En mi proyecto estoy usando sub consulta como esto está por debajo de

var data = (from con in dbData.tblPresenters 
         where con.PresenterID == ID 
         select new 
         { 
          Name = con.Name, 

          Title = dbData.tblTitles.Where(x => x.TitleID == con.PresenterTitleID).FirstOrDefault() 
         }).ToList(); 

creo que esto le ayudará a ....

+1

Creo que sé cuál es el problema, la primera clase 'nueva' anónima está en conflicto con la segunda clase 'nueva' anónima porque ya está creada. Sin embargo, no sé cuál es la solución ... – user1655940

1

has necesitado para definir los tipos de nombre/lugar de mantenerlos en el anonimato,

var subcatquery = from categories in mydb.Categories 
        where categories.ParentId == null 
        select new categoryGroup() 
        { 
         category = categories.Name, 
         subcat = (from sub in mydb.Categories 
           where sub.ParentId == sub.Id 
           select new subcategoryGroup() 
           { 
            subcatItem = sub.Name, 
            subcatId = sub.Id 
            }) 
        }; 
+0

Lo he intentado, no me permite compilar. Hay un error en esta declaración: seleccione nuevo subcategoryGroup() – user1655940