Подтвердить что ты не робот

Создайте список одного типа объектов из списка другого, используя Linq

Если у меня есть классы типа A и B:

public class A
{
    public int TotalCount;
    public string Title;
}

public class B
{
    public int Count;
    public string Title;
}

У меня есть список экземпляров экземпляров. Каков наиболее эффективный способ создания и заполнения списка типа B с помощью Linq?

4b9b3361

Ответ 1

List<B> listB = listA.Select(a => new B()
   {
        Count = a.TotalCount,
        Title = a.Title
   }).ToList();

Делает то же самое, что и решение eduncan с различным синтаксисом. Сделайте свой выбор..

Ответ 2

var list = 
  from a in TableA
  select new B {
    Count = a.TotalCount,
    Title = a.Title
  };

Вы обновляете экземпляр B в своем предложении select и назначаете свойства с помощью функции присвоения свойств inline в С# 3.0.

Преимущества сопоставления его встроенной строки - это отсроченное выполнение вашего оператора Linq. Linq отобразит измененный оператор и выполнит его из вашего IQueryable. Например:

public class ClassA 
{
  public int TotalCount;    
  public string Title;
}

public class ClassB
{
  public int Count;
  public string Title;
}

public IQueryable<ClassB> FetchAllOfClassB()
{
  var list = 
    from a in TableOfClassA
    select new ClassB {
      Count = a.TotalCount,
      Title = a.Title
    };

  return list.AsQueryable();
}

Технически, AsQueryable() немного избыточно. Иногда я использую его, чтобы понять, что это абсолютно необходимо. Тем не менее, сам объект списка является IQueryable классаB.

Затем вы можете вызвать FetchAllOfClassB() далее цепочку и использовать IQuerable. Это довольно гладкий и эффективный.

Ответ 3

Хмм, с моей головы (так что, вероятно, будут ошибки!):

List< B > = from a in listOfA select new B(a.count, a.title);

может сделать трюк.