Ответ 1
List<B> listB = listA.Select(a => new B()
{
Count = a.TotalCount,
Title = a.Title
}).ToList();
Делает то же самое, что и решение eduncan с различным синтаксисом. Сделайте свой выбор..
Если у меня есть классы типа A и B:
public class A
{
public int TotalCount;
public string Title;
}
public class B
{
public int Count;
public string Title;
}
У меня есть список экземпляров экземпляров. Каков наиболее эффективный способ создания и заполнения списка типа B с помощью Linq?
List<B> listB = listA.Select(a => new B()
{
Count = a.TotalCount,
Title = a.Title
}).ToList();
Делает то же самое, что и решение eduncan с различным синтаксисом. Сделайте свой выбор..
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. Это довольно гладкий и эффективный.
Хмм, с моей головы (так что, вероятно, будут ошибки!):
List< B > = from a in listOfA select new B(a.count, a.title);
может сделать трюк.