class Foo
{
int PrimaryItem;
bool HasOtherItems;
IEnumerable<int> OtherItems;
}
List<Foo> fooList;
如何获取fooList
中引用的所有项ID的列表?
var items = fooList
.Select(
/*
f => f.PrimaryItem;
if (f.HasOtherItems)
AddRange(f => f.OtherItems)
*/
).Distinct();
答案 0 :(得分:7)
使用SelectMany
并让它返回PrimaryItem
和OtherItems
的连锁列表(如果它们存在):
var result = fooList
.SelectMany(f => (new[] { f.PrimaryItem })
.Concat(f.HasOtherItems ? f.OtherItems : new int[] { }))
.Distinct();
答案 1 :(得分:1)
略有变化:
var items = fooList.Select(i => i.PrimaryItem).Union(
fooList.Where(foo => foo.HasOtherItems).SelectMany(foo => foo.OtherItems));
这需要PrimaryItem
的集合,并且(其中设置HasOtherItems
)连接OtherItems
的组合集。 Union
确保不同。