Convert list of of objects to list of tuple without iterating

16,451

Solution 1

You just want to use a projection here ( Select ) which applies the transformation in your lambda expression to each element in the source collection.

List<Tuple<app_subjects, bool>> tuples = subjectList.Select(x => new Tuple<app_subjects, bool>(x, false)).ToList();

The ToList() call is not entirely necessary, if you removed it then the method will return an IEnumerable<Tuple<app_subjects, bool>>. If you're just going to iterate the collection of tuples afterwards the ToList call should be removed as it forces execution (enumerates the IEnumberable) and then your next operation (the foreach) would do the same, making the code perform worse.

Solution 2

Like this?

subjectList.Select(s => Tuple.Create(s, false)).ToList();
Share:
16,451
aldosa
Author by

aldosa

Updated on June 23, 2022

Comments

  • aldosa
    aldosa almost 2 years

    I'm trying to add an extra parameter to a list of ef objects to track processing, but I keep running into having to initialize each list item explicitly. What's the correct linq way to do this? Aside from terseness, is there any advantage to a linq syntax in this case?

    List<app_subjects> subjectList = AppMySQLQueries.GetAllSubjects();
    List<Tuple<app_subjects, bool>> subjectCollection = new List<Tuple<app_subjects, bool>>(subjectList.Count);
    
    foreach (app_subjects subject in subjectList)
    {
         subjectCollection.Add(Tuple.Create(subject, false));
    }
    

    I have searched the site without success.