6

Próbuję utworzyć zapytanie w mojej usłudze domeny (Aplikacja biznesowa SilverS Business VS 2010), która zwraca wyniki z inspekcji odczyty, które pojawiły się jako określonej wartości, moja baza danych jest skonfigurowany jako:Nie można niejawnie przekonwertować typu "System.Collections.Generic.List <T>" na "System.Linq.IQueryable <T>"

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

Więc, jak widać, są odczyty kontrolne dla lokalizacji pod obszarów i miejsc. Mam POCO nazwie nazwa 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; } 
    } 

którego używam do zwracania wyników zapytania:

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

Niestety, to powracający błąd w tytule i nie mam pojęcia, dlaczego tak lista jest oczywiście element listy i mam przeliczone wyniki

.ToList<LocationStatusList> 
+2

Dlaczego chcesz zwrócić 'IQueryable' w' GetLocationStatus'? 'IQueryable' jest (nieformalnie rzecz biorąc) używane do reprezentowania rzeczy przeliczalnych w odległych lokalizacjach. Utworzono listę lokalną jako wynik. To po prostu "IEnountable". – phg

+0

Czy to LINQ do SQL lub LINQ do Enities? Wydaje mi się, że to drugie. –

+0

To LINQ do Entitites - mistagged sorry! – xhedgepigx

Odpowiedz

18

problem polega właśnie ponieważ masz zwane ToList(). Ogłosiłeś, że wracasz IQueryable<LocationStatusList>, a List<T> nie implementuje IQueryable<T>.

opcje (wybrać jeden):

  • Zdjąć ToList połączenia
  • Zmień typ powrotu do IEnumerable<LocationStatusList>, IList<LocationStatusList> lub ewentualnie List<LocationStatusList>
  • połączeń AsQueryable() po ToList():

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

Należy zauważyć, że nie trzeba argumentu typu w wywołaniu ToList - jest to ten sam, który kompilator i tak wnioskuje.

+0

Doszedłem do tego wniosku natychmiast, zanim przeczytałem ten post! Dziękuję - twoja odpowiedź wyjaśnia, dlaczego źle to zrobiłem na pierwszym miejscu. Nie jestem pewien, dlaczego miałem ToList(). – xhedgepigx

Powiązane problemy