2011-06-09 32 views
1

我有一个不可变的列表。如何使用Select()扩展方法将对象添加到不可变的通用列表中

在下面的g.Select(...)我做一个.ToList()放入MemberIdList。我不想用ToList()创建一个新的List,而是我想将每个r.Field字符串添加到单元对象内的不可变列表中。

我该怎么做?

var groupedCollection = table.AsEnumerable() 
     .GroupBy(row => new 
     { 
      UType = row.Field<string>("UnitType"), 
      UZoom = row.Field<string>("UnitZoom"), 
      MZoom = row.Field<string>("MemberZoom"), 
     }); 

    var unitCollection = groupedCollection 
     .Select(g => new Unit 
     { 
      UnitType = g.Key.UType, 
      UnitZoom = g.Key.UZoom, 
      MemberZoom = g.Key.MZoom, 
      MemberIdList = g.Select(r => r.Field<string>("TestId")).ToList(), 
     }); 

    List<Unit> units = unitCollection.ToList(); 


public class Unit 
{ 
    public Unit() 
    { 
     MemberIdList = new List<String>(); 
    } 

    public String UnitType { get; set; } 
    public String UnitZoom { get; set; } 
    public String MemberZoom { get; set; } 
    public int MemberOrder { get; set; } 

    public List<String> MemberIdList { get; private set; } 
} 
+0

MemberIdList.AddRange(...) ? – 2011-06-09 18:26:11

+0

在我的上下文中MemberIdList.AddRange(g.Select(r => r.Field (“TestId”)));不起作用。输入MemberIdList。没有AddRange。 – msfanboy 2011-06-09 18:32:11

+0

@msfanboy你确定它是'List '然后呢?这绝对有AddRange。你当然需要告诉它的实例,即。 Obj.MemberIdList.AddRange() – 2011-06-09 18:40:20

回答

2

为什么不只是创建单位一个构造函数的数据MemberIdList像:

public Unit(IEnumerable<string> memberIdList) 
{ 
    MemberIdList = new List<string>(memberIdList); 
} 

和修改您的选择:

.Select(g => new Unit(g.Select(r => r.Field<string>("TestId"))) 
{ 
    UnitType = g.Key.UType, 
    UnitZoom = g.Key.UZoom, 
    MemberZoom = g.Key.MZoom 
}); 
相关问题