6

Estoy intentando crear una consulta en mi servicio de dominio (VS 2010 Silverlight Business Application) que devuelve los resultados de la inspección lecturas que salieron como un valor específico, mi base de datos se configura como:No se puede convertir implícitamente el tipo 'System.Collections.Generic.List <T>' en 'System.Linq.IQueryable <T>'

Locations 
    a) Inspections 
    b) InspectionItems 
     c) InspectionReadings  
    a) Areas 
    b) Inspections 
     c) InspectionItems 
      d) InspectionReadings 

por lo tanto, como se puede ver, hay lecturas de inspección de lugares bajo zonas y ubicaciones. Tengo un POCO llamado nombre StatusList:

public class StatusList 
    { 
     [Key] 
     [Editable(false)] 
     public Guid ID { get; set; } 

     public string LocationName { get; set; } 

     public DateTime LastInspectionDate { get; set; } 

     public string Status { get; set; } 
    } 

el que estoy usando para devolver los resultados de la consulta:

public IQueryable<StatusList> GetLocationStatus() 
    { 
     var status = (from location in this.ObjectContext.Locations 
         where location.InspectionReadings.Status == value 
         orderby a.DateTaken       
         select new LocationStatusList() 
         { 
          ID = a.ID, 
          LocationName = d.Name,        
         }).ToList<StatusList>(); 
     return status;    
    } 

Por desgracia, es que vuelven el error en el título y no tengo ni idea de por qué tan la lista es claramente un elemento de la lista y me han convertido los resultados

.ToList<LocationStatusList> 
+2

¿Por qué devolvería un 'IQueryable' en' GetLocationStatus'? 'IQueryable' se usa (informalmente) para representar cosas enumerables en ubicaciones remotas. Usted creó una lista local como resultado. Eso es simplemente un 'IEnumerable'. – phg

+0

¿Eso es LINQ to SQL o LINQ to Enities? Me parece lo último. –

+0

Es LINQ to Entitites - ¡disculpa lo siento! – xhedgepigx

Respuesta

18

el problema es, precisamente, porque que ha llamado ToList(). Usted ha declarado que está devolviendo IQueryable<LocationStatusList>, y List<T> no implementa IQueryable<T>.

opciones (elegir uno):

  • Retire la ToList llamada
  • Cambiar el tipo de retorno a IEnumerable<LocationStatusList>, IList<LocationStatusList> o posiblemente List<LocationStatusList>
  • llamada AsQueryable() después ToList():

    ... as before ... 
    .ToList().AsQueryable(); 
    

Tenga en cuenta que no necesita el argumento de tipo en la llamada ToList; es el mismo que el compilador deduciría de todos modos.

+0

¡Había llegado a esta conclusión inmediatamente antes de leer esta publicación! Gracias, tu respuesta explica por qué me equivoqué en primer lugar. No estoy seguro de por qué tenía ToList(). – xhedgepigx

Cuestiones relacionadas