1
class Foo
{
    int PrimaryItem;
    bool HasOtherItems;
    IEnumerable<int> OtherItems;
}

List<Foo> fooList;

如何获取内部引用的所有项目 ID 的列表fooList

var items = fooList
             .Select(
              /*
                f => f.PrimaryItem;
                if (f.HasOtherItems)
                    AddRange(f => f.OtherItems)
              */  
              ).Distinct();
4

2 回答 2

8

使用SelectMany并让它返回和的串联列表PrimaryItemOtherItems如果它们存在):

var result = fooList
    .SelectMany(f => (new[] { f.PrimaryItem })
        .Concat(f.HasOtherItems ? f.OtherItems : new int[] { }))
    .Distinct();
于 2010-10-13T11:41:12.817 回答
1

作为一个轻微的变化:

var items = fooList.Select(i => i.PrimaryItem).Union(
      fooList.Where(foo => foo.HasOtherItems).SelectMany(foo => foo.OtherItems));

这需要 的集合PrimaryItem,并且 (where HasOtherItemsis set) 连接 的组合集合OtherItemsUnion确保与众不同。

于 2010-10-13T11:52:28.493 回答