如何使用Select()扩展方法将对象添加到不可变的泛型List

时间:2011-06-09 18:06:27

标签: c# list select extension-methods immutability

我有一个不可变的列表。

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

我该怎么做?

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; }
}

1 个答案:

答案 0 :(得分:2)

为什么不为Unit创建一个构造函数来获取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
});