user1124937
user1124937

Reputation: 109

LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1

When I execute the following code:

IHotelDataAccess _hotelDataAccess= new HotelDataAccess(_entities);
int myVal = (from u in _hotelDataAccess.GetHotelsByCityId(19)
    select u).Count();

myVal returns an integer value as expected, however if I try and return the IQueryable as below

return (from geoLocation in _entities.ViewGeographyLocation
 where geoLocation.CountryCode == countryCode
 orderby geoLocation.SortOrder, geoLocation.CityName
 select new ContinentModel
 {
  ContinentCode = geoLocation.ContinentCode,
  ContinentName = geoLocation.ContinentName,
  CountryCode = geoLocation.CountryCode,
  CountryName = geoLocation.CountryName,
  CityId = geoLocation.CityId,
  CityName = geoLocation.CityName,
  CityCode = geoLocation.CityName,
  TotalCount = ((from u in _hotelDataAccess.GetHotelsByCityId(19)
   select u).Count())
 });

I get the error :

LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[DestKosher.Model.HotelModel] GetHotelsByCityId(Int32)' method, and this method cannot be translated into a store expression.

The method hotelDataAccess.GetHotelsByCityId(19) return IQueryable. Any thoughts, help or solutions would be most appreciated. Regards,

Martin

UPDATE:

This query was initially setup to see if by putting an integer into the function GetHotelsByCityId would work. However, what I want to do ultimately is:

return (from geoLocation in _entities.ViewGeographyLocation
 where geoLocation.CountryCode == countryCode
 orderby geoLocation.SortOrder, geoLocation.CityName
 select new ContinentModel
 {
  ContinentCode = geoLocation.ContinentCode,
  ContinentName = geoLocation.ContinentName,
  CountryCode = geoLocation.CountryCode,
  CountryName = geoLocation.CountryName,
  CityId = geoLocation.CityId,
  CityName = geoLocation.CityName,
  CityCode = geoLocation.CityName,
  TotalCount = ((from u in _hotelDataAccess.GetHotelsByCityId(geoLocation.CityId)
   select u).Count())
 });

Upvotes: 2

Views: 2230

Answers (2)

GiantHornet
GiantHornet

Reputation: 102

Try adding the namespace "System.Linq" and also check your project references if you have "System.Core" assembly reference.

Upvotes: 0

Pranay Rana
Pranay Rana

Reputation: 176886

By design, LINQ to Entities requires the whole LINQ query expression to be translated to a server query. Only a few uncorrelated subexpressions (expressions in the query that do not depend on the results from the server) are evaluated on the client before the query is translated. Arbitrary method invocations that do not have a known translation, like GetHotelsByCityId() in this case, are not supported.

you can do like this

var list = _hotelDataAccess.GetHotelsByCityId(19).ToList();
int myVal = (from u in list
    select u).Count();

than us myval in your query

return (from geoLocation in _entities.ViewGeographyLocation
 where geoLocation.CountryCode == countryCode
 orderby geoLocation.SortOrder, geoLocation.CityName
 select new ContinentModel
 {
  ContinentCode = geoLocation.ContinentCode,
  ContinentName = geoLocation.ContinentName,
  CountryCode = geoLocation.CountryCode,
  CountryName = geoLocation.CountryName,
  CityId = geoLocation.CityId,
  CityName = geoLocation.CityName,
  CityCode = geoLocation.CityName,
  TotalCount = myVal 
 });

Read in more Deatil : LINQ to Entities, what is not supported?

Upvotes: 3

Related Questions