Я только что изменил запрос linq для включения индекса. Индекс необходим, чтобы помочь клиентскому веб-приложению управлять возвращенными элементами (добавление, удаление, обновление, дублирование и т. Д.). Эта часть работает с макетными данными на стороне клиента, поэтому ей нужна такая же структура формата, которая возвращается с сервера. Индекс должен быть упорядочен как 0,1,2, ..
Ниже приведен пример того, что я пытаюсь сделать:
Допустим, я хочу найти список городов в стране, в которой есть штаты / провинции.
Итак, у меня есть следующие два класса:
public class CityItemDTO {
public int id { get; set; }
public City item {get; set; }
}
public class CityDTO {
public string name {get; set;}
public string stateName {get; set; }
public int population {get; set; }
}
Я хочу добавить индекс вместе со списком городов и штатов:
var cities = context.Countries
.Where(s => query.Name == s.Name)
.Select((s,index) => new CityItemDTO
{
id = index,
item = new CityDTO()
{
name = s.name,
stateName = s.stateName
population = s.population
}
});
Но я получаю странную ошибку:
«Не удалось разобрать значение выражения» (Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1 [DataService.Models.Countries]). Где (s => (__query_Name_0 == s.Name)). Выбрать ((s) , index) => new CityItemDTO () {id = index, item = new CityDTO () {Name = s.Name, StateName = s.StateName, Population = s.Population}}) ': эта перегрузка метода' System .Linq.Queryable.Select 'в настоящее время не поддерживается. "
Однако, если я уберу индекс, сработает следующее:
var cities = context.Countries
.Where(s => query.Name == s.Name)
.Select(s => new CityDTO
{
new CityDTO()
{
name = s.name,
stateName = s.stateName
population = s.population
}
});