Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a more succinct way of adding items to a collection property using LINQ?

Tags:

c#

linq

Is there a one line LINQ statement that would replace the foreach loop in the code below?

public static ReplaceItemsOnOrder(Order order, List<OrderItem> replacements)
{
    order.Items.Clear();
    foreach (var item in replacements)
    {
        order.Items.Add(item);
    }
}

EDIT:

Here is a simplified definition for the Order class:

public class Order
{
    private Collection<OrderItem> _items = new Collection<OrderItem>();
    public Collection<OrderItem> Items
    {
        get { return _items; }
    }
}
like image 983
Ɖiamond ǤeezeƦ Avatar asked Feb 04 '26 04:02

Ɖiamond ǤeezeƦ


2 Answers

You could write the following:

order.Items.Clear();
replacements.ForEach(order.Items.Add);

Alternatively if there's an addRange method (available on List<T>):

order.Items.Clear();
order.Items.AddRange(replacements);
like image 91
Rich O'Kelly Avatar answered Feb 05 '26 19:02

Rich O'Kelly


It's not LINQ but there's AddRange

order.Items.AddRange(replacements);

But you haven't said what Items is, so unless it's a List that method won't be available.

like image 29
ChrisF Avatar answered Feb 05 '26 17:02

ChrisF