Преобразование списка различных объектов из БД в список объектов в Entity Framework Core - PullRequest
0 голосов
/ 27 июня 2019

Новичок в LINQ, я не уверен, поместил ли я проблему в правильное описание.

Хотите преобразовать вертикальную структуру

[Label]    [Value]
-Field1      1
-Field2      2
-Field3      3

к горизонтальному выравниванию, как показано ниже

Field1  Field2  Field3 
  1       2       3     

Пример:

Приведенный ниже список объектов, которые я получаю от Microservice в формате JSON

{
  0: {Name: "Jason" , Age: 20 , Address: "London"}
  1: {Name: "Andy" , Age: 35, Address: "Boston"}
  2: {Name: "Mike", Age : 27,Address: "California"}
  3: {Name: "Maria", Age: 22,Address: "Arizona" }
}

, который следует преобразовать в формат ниже

{       
  0: {"Jason","Andy","Mike","Maria"}
  1: {20,35,27,22}
  2: {"London","Boston","California","Arizona"}
}

Я позаботился об этом на фронте пользовательского интерфейса, но хочу отформатировать его в конце службы, поэтому после сериализации Json 0-й, 1-й, 2-й индексы должны иметь соответственно имя, возраст и адрес.

Ниже приведена модель, которая будет хранить преобразованные данные на сервере. (это будет список данных модели)

public class Reviewer
{
 public string Name { get; set; }

 public int Age { get; set; }

 public string Address {get;set;}
}

Я пробовал много способов сгладить массив и получить результат в вышеуказанном формате, но не смог найти правильный.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

О вашем классе я изменяю int Age на string Age.Потому что 20,35,27,22 не являются int.

public class Reviewer
{
    public string Name { get; set; }
    public string Age { get; set; }
    public string Address { get; set; }
}

public static class InitializeAutoMapper
{
    public static void Initialize()
    {
        AutoMapper.Mapper.Initialize(config =>
        {
            config.CreateMap<JArray, Reviewer>()
            .ForMember(dest => dest.Name, opt => opt.MapFrom(so =>
            string.Join(", ", so.Select(x => new JObject(new JProperty("Name", x["Name"]))).Values("Name").ToList())))

            .ForMember(dest => dest.Age, opt => opt.MapFrom(so =>
            string.Join(", ", so.Select(x => new JObject(new JProperty("Age", x["Age"]))).Values("Age").ToList())))

            .ForMember(dest => dest.Address, opt => opt.MapFrom(so =>
            string.Join(", ", so.Select(x => new JObject(new JProperty("Address", x["Address"]))).Values("Address").ToList())));
        });
    }
}

class Program
{
    static void Main(string[] args)
    {
        InitializeAutoMapper.Initialize();

        string json = @"[
                        { Name: ""Jason"" , Age: 20 , Address: ""London""},
                        { Name: ""Andy"" , Age: 35, Address: ""Boston""},
                        { Name: ""Mike"", Age: 27,Address: ""California""},
                        { Name: ""Maria"", Age: 22,Address: ""Arizona"" }]";

        Reviewer reviewer = AutoMapper.Mapper.Map<Reviewer>(JArray.Parse(json));
    }
}

enter image description here

0 голосов
/ 27 июня 2019

Ваши примеры не имеют смысла ... Если вы имеете в виду, что вы хотите это:

{       
  Name: ["Jason","Andy","Mike","Maria"]
  Age: [20,35,27,22]
  Address: ["London","Boston","California","Arizona"]
}

Как и в 3 массивах, один с именами, один с возрастом и один с адресами, выможет сделать это:

var result = new Reviewer(){
    Name = initialArray.Select(a => a.Name).ToArray(),
    Age = initialArray.Select(a => a.Age).ToArray(),
    Address = initialArray.Select(a => a.Address).ToArray()
};

С

var initialArray = JsonConvert.Deserialize(@"
[
  {Name: \"Jason\" , Age: 20 , Address: \"London\"},
  {Name: \"Andy\" , Age: 35, Address: \"Boston\"},
  {Name: \"Mike\", Age : 27,Address: \"California\"},
  {Name: \"Maria\" Age: 22,Address: \"Arizona\" }
]
");

Если это не то, что вы имеете в виду, вам нужно уточнить ваш вопрос ... Ваши примеры не являются действительными JSON, икласс модели, который вы показали, соответствовал вашим данным из первого примера, а не тому, что вы показали, что хотели ...

...