Копировать данные из одного списка в другой при форматировании в C # - PullRequest
0 голосов
/ 02 марта 2019

У меня есть класс, показанный ниже:

public class BidCostModel {
    public string Code { get; set; }
    public decimal? Month1 { get; set; }
    public decimal? Month2 { get; set; }
    public decimal? Month3 { get; set; }       
}

Я создал его список и заполнил его некоторыми данными, используя EF:

List<BidCostModel> list1 = new List<BidCostModel>();
fillOperation(data);

У меня есть другой класс с похожим свойствомимя, но другой тип данных

public class BidCostModelFormatted {
    public string Code { get; set; }
    public string Month1 { get; set; }
    public string Month2 { get; set; }
    public string Month3 { get; set; }        
}

List<BidCostModelFormatted> list2 = new List<BidCostModelFormatted>();

Я хочу скопировать данные из list1 в list2 при добавлении тысяч разделителей.Есть ли инструмент отображения или что-то, что я могу использовать, не делая цикл foreach, чтобы добавить тысячи разделителей при копировании данных в list2.

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Нет необходимости полагаться на какой-либо внешний инструмент.Даже с помощью инструмента вам нужно определить «отформатированный» класс и настроить инструмент для форматирования определенных свойств.

Создать класс, который будет отвечать за «форматирование» значений

public class BidCostFormatted
{
    private readonly BidCostModel _model;
    public string Code => _model.Code;
    public string Month1 => _model.Month1.ForView();
    public string Month2 => _model.Month2.ForView();
    public string Month3 => _model.Month3.ForView();  

    public BidCostFormatted(BidCostModel model) => _model = model;       
}

public static class Extensions
{
    public static string ForView(this decimal? value)
    {
        if (value.HasValue)
        {
            return value.Value.ToString("N");
        }

        return string.Empty;
    }
}

Тогда форматирование будет простым и поддерживаемым

var formattedBidCosts = 
    bidCosts.Select(cost => new BidCostFormatted(cost)).ToList();
0 голосов
/ 02 марта 2019

Если вы хотите сделать это всего за две строки, затем сериализовать первый список в JSON и затем десериализовать его в список второго класса, он будет работать.

0 голосов
/ 02 марта 2019

Возможно отформатировать исходные значения с помощью ToString("N") и добавить его в новый список:

list2.AddRange(
    list1.Select(
        a => {
            b = new BidCostModelFormatted();
            b.Code = a.Code;
            b.Month1 = a.Month1.ToString("N");
            b.Month2 = a.Month2.ToString("N");
            b.Month3 = a.Month3.ToString("N");
            return b;
        }
    )
);
...