Equipment myEquipment = myProfiles["my name"].Activities["my activity"].Equipment;
However, it would be a good idea to check for null values at each stage.
"but equipment is a string. and how do i check for nulls?"
Well, you could change
string myEquipment = myProfiles["my name"].Activities["my activity"].Equipment;
Checking for nulls just means that when ever you access a List, you make sure that what was looked for exists: if it isn't, then it will return a null value. If you try to use that to access another list, your will get an "object not set to an instance..." error.
string equipment = "none";
Profile p = myProfiles;
if (p != null)
Activity a = p.Activities;
if (a != null)
equipment = a.Equipment;
If you want to use the string index version I suggested at the top, you will need to use a Dictionary, rather than a List.