Well, to start with List<T> does have the FindAll and ConvertAll methods - but the more idiomatic, modern approach is to use LINQ:
// Find all the people older than 30
var query1 = list.Where(person => person.Age > 30);
// Find each person's name
var query2 = list.Select(person => person.Name);
You'll need a using directive in your file to make this work:
Note that these don't use strings to express predicates and projects - they use delegates, usually created from lambda expressions as above.
If lambda expressions and LINQ are new to you, I would suggest you get a book covering LINQ first, such as LINQ in Action, Pro LINQ, C# 4 in a Nutshell or my own C# in Depth. You certainly can learn LINQ just from web tutorials, but I think it's such an important technology, it's worth taking the time to learn it thoroughly.
I personally preffer LINQ to SQL and ADO.NET Entity Framework. Microsoft guys also use those technologies in their latest projects (take a look at KOBE project for example). Thus, Microsoft recommends those two as well.
Though.. sometimes I use Data Access Application block from Enterprise Library and manual DAL coding when I need maximum control over it's functionality and implementation.
Other alternatives are: NHibernate, SubSonic, different ORM solutions like LLBLGen Pro.
Great books on this subject:
ADO.Net may be a pretty broad topic. Here are some books that I've had success with:
Though you may be "using" System.Linq in your project, you are not using the so-called "Linq-to-XML" classes. Which make things about 5 times easier, even you're not using LINQ on them! Use the System.Linq.XML namesspace, to have access to these new xml classes (XDocument, XElement, etc.)
XDocument XDoc = XDocument.Load("ThePath")
String Field1 = (String)XDoc.Root.Element("Data").Element("Field1")