2013-03-29 175 views
0

如果我有一个包含10个属性的对象列表,并且我想返回这些对象的列表,但只有10个可用的3个属性,将如何我这样做?仅返回对象的几个属性

public class Example 
{ 
    public int attr1 {get;set;} 
    public int attr2 {get;set;} 
    public int attr3 {get;set;} 
    public int attr4 {get;set;} 
    public int attr5 {get;set;} 
} 

return ExampleList; //have the return value be a list with only attr1, 2, and 3 visible. 
+0

http://msdn.microsoft.com/en-us/library/vstudio/bb397696.aspx –

回答

4

您可以使用LINQ与Select方法并返回anonymous type

var result = ExampleList.Select(x => new { x.attr1, x.attr2, x.attr3 }); 

或者,明确用3个属性定义自己的类,这种情况下,通常,如果你从域实体转换为视图模型或DTO对象:

class Dto 
{ 
    public int Pro1 { get; set; } 
    public int Pro2 { get; set; } 
    public int Pro3 { get; set; } 
} 

var result = ExampleList.Select(x => new Dto { 
             Pro1 = x.attr1, 
             Pro2 = x.attr2, 
             Pro3 = x.attr3 
            }); 

或者,如果你只是想要一个转储类,你可以使用Tuple

var result = ExampleList.Select(x => Tuple.Create(x.attr1, x.attr2, x.attr3)); 
+0

+1是第一个发布这个答案 –

+0

这是我正在寻找,但为什么,在第一个例子(匿名类型的例子)我得到“类型参数不能从使用推断”错误? – proseidon

+0

@ proseidon:我编辑了我的答案 –

0

使属性可以为空并使用Object Initializers

public class Example 
{ 
    public int? attr1 {get;set;} 
    public int? attr2 {get;set;} 
    public int? attr3 {get;set;} 
    public int? attr4 {get;set;} 
    public int? attr5 {get;set;} 
} 
0

使用LINQ投影算:

var resultList = ExampleList.Select(x => new 
    { 
     x.attr1, 
     x.attr2, 
     x.attr3 
    }); 

或者,如果你需要指定另一名道具:

var resultList = ExampleList.Select(x => new 
    { 
     PropName1 = x.attr1, 
     PropName2 = x.attr2, 
     PropName2 = x.attr3, // <- The last comma can be leaved here. 
    }); 
是导致枚举

注意的是Example型不能不预先的编译(不是运行时)创建的匿名类型。