Добавление данных из одного списка в другой с помощью linq

#c# #linq

#c# #linq

Вопрос:

Мне нужно заполнить выпадающий список в моем пользовательском интерфейсе и, следовательно, добавить объект списка в модель представления в моем приложении c #. Я извлекаю данные из своего кода контроллера для выпадающего списка. Каков наилучший способ присвоения данных объекту viewmodel. Является ли linq вариантом?

Мне в основном нужно назначить fundclasses для fundTrackRecord.FundClass

Основная модель представления:

 public class FundPerformanceVM
{
    public FundPerformanceVM()
    {
        TrackRecord = new List<TrackRecordVM>();
    }

    public int FundId { get; set; }
    public string FundName { get; set; }
    public List<FundClassVM> FundClass { get; set; }
    public string BenchmarkName1 { get; set; }
    public string BenchmarkName2 { get; set; }
    public List<TrackRecordVM> TrackRecord { get; set; }
    public List<Tuple<string, string, string>> FundStatistics { get; set; }

}

public class FundClassVM
{
    public int FundClassId { get; set; }
    public string FundClass { get; set; }
}
  

Код контроллера:

 var service = GetViewService<V_LEGAL_FUND_CLASS_SUMMARY>();

foreach (KeyValuePair<int, IEnumerable<FUND_PERFORMANCE>> entry in allPerformance)
{
   var fundClasses = service.GetAll().Where(x => x.FUND_ID == entry.Key).Select(x => new { x.LEGAL_FUND_CLASS_ID, x.LEGAL_FUND_CLASS}).ToList();
   var fundTrackRecord = new FundPerformanceVM();     

   fundTrackRecord.FundClass = ??;
  

Ответ №1:

Если я правильно понял структуру вашей модели, вы можете попробовать это:

 fundTrackRecord.FundClass = fundClasses.Select(fc => new FundClassVM
{
    FundClassId = fc.LEGAL_FUND_CLASS_ID,
    FundClass = fc.LEGAL_FUND_CLASS
}).ToList();
  

Вы также можете сделать это напрямую, заменив код:

 var fundClasses = service.GetAll().Where(x => x.FUND_ID == entry.Key).Select(x => new { x.LEGAL_FUND_CLASS_ID, x.LEGAL_FUND_CLASS}).ToList();
var fundTrackRecord = new FundPerformanceVM();
  

С:

 var fundTrackRecord = new FundPerformanceVM();
fundTrackRecord.FundClass = service.GetAll().
    Where(x => x.FUND_ID == entry.Key).
    Select(fc => new FundClassVM
    {
        FundClassId = fc.LEGAL_FUND_CLASS_ID,
        FundClass = fc.LEGAL_FUND_CLASS
    }).ToList();