-1

我有一个问题,是否有可能以“更漂亮”的方式枚举我的嵌套对象:

foreach (EntityOpportunity opt in entAccount.Opportunities)
{
    foreach (EntityActivityPointer activity in opt.Activities)
    {
        condRegardingObjectId.Values.Add(activity.Id);
    }
}

每个机会实体中都有一个活动列表,我只需要 ID。

最好的祝福

4

5 回答 5

5

当然,使用SelectMany

var IDs = entAccount.Opportunities
                    .SelectMany(opt => opt.Activities, (opt, act) => act.Id);

由于您没有指定是什么condRegardingObjectId,我猜想知道如何将值的集合作为一个整体导入(类似于AddRange)?

于 2013-10-01T12:55:57.700 回答
3

你所拥有的没有任何问题。当然,像SelectMany/Select这样的东西可以将它放在更少的行上,但这会产生开销(委托创建,并且不能使用自定义迭代器 - where-asforeach 可以使用自定义迭代器,并且所有的 IL 都在一个地方)。

坦率地说,我要做的唯一改变就是先抓住目标:

var list = condRegardingObjectId.Values;
foreach(EntityOpportunity opt in entAccount.Opportunities) {
    foreach(EntityActivityPointer activity in opt.Activities) {
        list.Add(activity.Id);
    }
}
于 2013-10-01T12:55:52.933 回答
1

如果您只想要活动的 ID,则可以使用 Linq:

var activityIds = entAccount.Opportunities.SelectMany(p=>p.Activities).Select(p=>p.Id);
于 2013-10-01T12:55:55.407 回答
0

对于列表 T 对象:

entAccount.Opportunities.ForEach(opt => opt.Activities.ForEach(activitiy => condRegardingObjectId.Values.Add(activity.Id)));
于 2013-10-01T13:01:03.950 回答
0

只是猜测你的对象:

                    foreach (EntityActivityPointer activity in entAccount.Opportunities.SelectMany(opt => opt.Activities))
                    {
                        condRegardingObjectId.Values.Add(activity.Id);
                    }
于 2013-10-01T13:05:06.430 回答