Переконфигурируйте запрос Linq для создания объектов: LINQ to Entities не распознает метод - PullRequest
0 голосов
/ 17 июня 2019

У меня есть следующий запрос, который возвращает новый набор объектов:

  _MapData.features = (from gs in QBEntities.GeoStates
                       select new MapDataRecord()
                       {
                         properties = new MapDataRecordProperties()
                                      {
                                        GEOID = gs.GEOID,
                                        GEO_NAME = gs.GEO_NAME
                                      },
                         geometry = SetGeoJsonGeography(gs.GEO_OBJECT.SpatialTypeName, gs.JSON_GEOMETRY)
                       }
                      ).ToList();

Однако у него есть проблема с SetGeoJsonGeography (), я получаю сообщение об ошибке: «LINQ to Entities не распознает метод'

Перед созданием геометрии необходимо выяснить тип геометрии, чтобы можно было создать правильный тип массива.

Метод:

private MapDataGeometry SetGeoJsonGeography(string GeographyType, string GeoJsonGeographyString)
{
  if (GeographyType.Equals("polygon", StringComparison.CurrentCultureIgnoreCase))
  {
    return new MapDataPolygon() { type = GeographyType, coordinates = Newtonsoft.Json.JsonConvert.DeserializeObject<double[][][]>(GeoJsonGeographyString) };
  }
  else if (GeographyType.Equals("multipolygon", StringComparison.CurrentCultureIgnoreCase))
  {
    return new MapDataMultiPolygon() { type = GeographyType, coordinates = Newtonsoft.Json.JsonConvert.DeserializeObject<double[][][][]>(GeoJsonGeographyString) };
  }
  else
  {
    return null;
  }
}

Вотклассы:

  [Serializable]
  public class MapDataGeometry
  {
    public string type { get; set; }
  }

  [Serializable]
  public class MapDataPolygon : MapDataGeometry
  {
    public double[][][] coordinates { get; set; }
  }

  [Serializable]
  public class MapDataMultiPolygon : MapDataGeometry
  {
    public double[][][][] coordinates { get; set; }
  }

Как мне этого добиться?

1 Ответ

1 голос
/ 17 июня 2019

Ваш метод не может быть передан вашему провайдеру sql. Сначала вы должны получить необработанные данные и после этого выполнить свой метод.

var geoStates = (from gs in QBEntities.GeoStates
                 select new
                 {
                     gs.GEOID,
                     gs.GEO_NAME,
                     SpatialTypeName = gs.GEO_OBJECT.SpatialTypeName,
                     gs.JSON_GEOMETRY
                 }).ToList();

_MapData.features = (from gs in geoStates
                     select new MapDataRecord
                     {
                         properties = new MapDataRecordProperties
                         {
                             GEOID = gs.GEOID,
                             GEO_NAME = gs.GEO_NAME
                         },
                         geometry = SetGeoJsonGeography(gs.SpatialTypeName, gs.JSON_GEOMETRY)
                     }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...