2017-04-11 121 views
2

假设我有一个类:转换列表<MyClass>为List <MyClass.Mydata>在C#

public class MyClass 
{ 
    public string Name {get; set;} 
    public int Value {get; set;} 
} 

我有这个类的列表:

List<MyClass> 

,我想打一个:

List<string> 

将包含所有MyClass.Name:

List<MyClass> 

有没有一种快速的方法如何做到这一点使用Linq的例子?

回答

11

当然,使用SelectToList

List<string> nameList = list.Select(x => x.Name).ToList(); 

另外,非LINQ,方法是使用List.ConvertAll

List<string> nameList = list.ConvertAll(x => x.Name); 

这会更有效,因为它知道目标的大小预先列出。

+0

谢谢,这正是我所缺少的。 –

+0

@JosefKvita,不要忘记接受答案,这和upvote是你如何对SO说“谢谢”。 – Sinatr

3

这是非常琐碎的,你只需要一个Select(),然后使用ToList()兑现的结果在List<T>

List<string> result = list.Select(x=>x.Name).ToList(); 
+0

谢谢,那正是我错过的地方。 –

1

如果你有很多类型转换的代码(例如,从实体模型的DTO ),看看Automapper。这使您可以将所有映射定义放在中央位置。它也可以按照惯例转换对象。

using AutoMapper; 

// only set up once in mapping config 
CreateMap<MyClass, string>().ConvertUsing(src => src.Name); 

// usage 
var myClass = new MyClass { Name = "the name" }; 
string result = Mapper.Map<string>(myClass); 

它可以通过将已知的映射应用到每个成员来解析开箱即用的集合。

MyClass[] myClassArray = new [] { myClass1, myClass2 }; 
string[] result = Mapper.Map<string[]>(myClassArray); 
相关问题