0

Code:

foreach (var item in items)
  testItems.Add(new TestItem { Header = item.TestItemTypeName, Content = item });

testItems is of type ObservableCollection<TabItem>

How to convert the above foreach loop to linq format? Thanks.

leppie
  • 115,091
  • 17
  • 196
  • 297
Earth
  • 3,477
  • 6
  • 37
  • 78

3 Answers3

4

How about

items.ForEach(i => testItems.Add(
    new TestItem
    {
        Header = i.TestItemTypeName,
        Content = i
    }));

Given that items is ObservableCollection<TabItem>

you could try

items.ToList().ForEach(i => testItems.Add(
new TestItem
{
    Header = i.TestItemTypeName,
    Content = i
}));
Adriaan Stander
  • 162,879
  • 31
  • 289
  • 284
1

Providing that testItems has AddRange function, i.e. inherits from List:

testItems.AddRange(items.Select(item => new TestItem{ Header = item.TestItemTypeName, Content = item }));

As you have mentioned,this is an ObservableCollection, so the method is not available. In that case, the way you provided is the simplest possible. However, if you need to use this functionality more often, consider checking the following link:

ObservableCollection Doesn't support AddRange method, so I get notified for each item added, besides what about INotifyCollectionChanging?

Community
  • 1
  • 1
Tomas Pastircak
  • 2,867
  • 16
  • 28
0

Or perhaps:

var testItems = items
                   .Select(item => 
                       new TestItem {
                           Header = item.TestItemTypeName, 
                           Content = item
                       })
                    .ToList();
Simon Whitehead
  • 63,300
  • 9
  • 114
  • 138