GameObject.FindGameObjectsWithTag returns an array of GameObjects.
An array in C# is a data structure that stores multiple objects of the same type.
A list is a generic collection of objects.
While an array and a list are very similar in concept, there are different between the two in terms of data access and usage. Generally an array is only populated once at creation and only read thereafter, while a List can have it's elements altered at any time (some caveats apply).
This StackOverflow question summaries why you might want one over the other: Array versus List<T>: When to use which?
In your specific case, you want to apply some Linq ordering to your GameObject collection so you need to convert the array received from FindGameObjectsWithTag
to a list.
You can do this in several ways. The easiest is to use a constructor overload on list to assign the entire array at once:
GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag("Player");
List<GameObject> gameObjectList = new List<GameObject(gameObjectArray);
Some other options are available here: Conversion of System.Array to List