2017-10-30 1 views
0

ich in einem Verfahren zur Herstellung einer Serviceklasse meiner Asp.Net MVC Anwendung dieser Balg Abfrage zur Verfügung gestellt:eine Liste von einem IOrderedQueryable durch ToList Verfahren von Linq Constructing

var query = 
      (from company in _companyRepository.DbSet() 
      join ct in _companyTagRepository.DbSet() 
       on company.CompanyID equals ct.CompanyID into cct 
      from companyTag in cct.DefaultIfEmpty() 
      where 
       filterItem.SelectedCompanyId.HasValue ? (company.CompanyID == filterItem.SelectedCompanyId.Value && company.CompanyStatusID == (int)Common.Enums.Status.Active) : 
       ((!filterItem.SelectedIndustries.Any() || 
        filterItem.SelectedIndustries.Contains(companyTag.TagID.Value)) && company.CompanyStatusID == (int)Common.Enums.Status.Active && 
       (companyTag != null && targetTagCategories.Contains(companyTag.Tag.TagCategoryID))) 
      orderby company.CompanyID 
      select new 
      { 
       Id = company.CompanyID, 
       Title = company.CompanyFaName, 
       TitleEn = company.CompanyEnName, 
       CompanyBrands = !string.IsNullOrEmpty(company.CompanyFaName) ? company.CompanyFaBrands : company.CompanyEnBarnds, 
       CompanyProductsOrServicesFa = company.CompanyFaProductsOrServices, 
       CompanyProductsOrServicesEn = company.CompanyEnProductsOrServices, 
       WebSite = company.WebsiteAddress, 
       CompanyIcon = company.BackgroundImage, 
       company.CompanyTags 
      }) 
      .GroupBy(company => new 
      { 
       company.Id, 
       company.Title, 
       company.TitleEn, 
       company.CompanyBrands, 
       company.CompanyProductsOrServicesFa, 
       company.CompanyProductsOrServicesEn, 
       company.WebSite, 
      }, result => new 
      { 
       Tags = result.CompanyTags.Select(s => new 
       { 
        CategryId = s.Tag.TagCategoryID, 
        Title = !string.IsNullOrEmpty(s.Company.CompanyFaName) ? s.Tag.TagFaName : s.Tag.TagEnName 
       }) 
      }) 
      .OrderByDescending(o => o.Key.Id); 

Die Type von „query“ Variable ist IOrderedQueryable (nichtIOrderedQueryable<T>) und ich kann Ausgabetyp meiner Methode zu IQueryable auch ändern.

Mein Problem ist, wo ich versuche, diese Abfrage zu einem list in meinem Controller zu konvertieren. Der Compiler schlägt mir vor, ToListAsync() Methode zu verwenden. Warum kann ich ToList() Methode hier nicht verwenden?

Auch soll ich erklären, dass, wenn ich die list in meiner Service-Methode erstellen, wo die Abfrage zu erzeugen ich in der Lage sein ToList() Methode zu verwenden, aber ich durfte den Ball IQueryable oder IOrderedQueryable nur an der Steuerung.

Sollte ich den Typ meiner Service-Methode ändern, die von IQueryable oder IOrderedQueryable auf andere Typen ausgegeben wird?

+0

ändern Sie sollten in der Lage sein, 'ToList' zu verwenden, vermissen Sie irgendwelche Verweise auf LINQ vielleicht? –

+0

Sie sollten die Signatur Ihrer Methode posten und wer sie anruft –

Antwort

1

Ich fand die Lösung. Ich muss den Methodenausgangstyp von IOrderedQueryable zu IOrderedQueryable<MyModel>

Verwandte Themen