public static StateCollection GetByName(String partialName) { StateCollection returnValue; returnValue = new StateCollection(); //baseList is some list I wasn't nice enough to show where it came from. //It's just a list of states. Get over it. var stateList = from state in baseList where state.Name.StartsWith(partialName) select new State(state.Name, state.Code); stateList.ToList().ForEach(currentState => returnValue.Add(currentState)); return returnValue; }
So what is done here:
Basically I am using a linq expression to get states from a list of states (Like Michigan, Illinois, or Canada) based on name. No big deal. Then I take the query and produce a List from it. AMAZIN!
stateList.ToList().ForEach(curretState => returnValue.Add(curretState));
ForEach is an extension method for List<>. Now if you remember from previous posts, that means it resides in a static class somewhere that “tacks” it on to the List<> class. Basically this method acts like a typical foreach loop. (You know, go through the list and do something. Or nothing. I suppose you could just loop through if you wanted to. I won’t tell you how to live your life.) Simple but in my opinion, much cleaner looking.
I mean I could do this:
public static StateCollection GetByName(String partialName) { StateCollection returnValue; returnValue = new StateCollection(); foreach(State currentState in baseList) { if(currentState.Name.StartsWith(partialName) { returnValue.Add(currentState); } } return returnValue; }
Really it’s just up to what you prefer. (And I’m sure you could drive a car with no power brakes. You’ll still get there.) Also, I really didn’t need the linq expression since I could have done this all with ForEach (Provided baseList is IEnumerable).
One last note, all IEnumerable collections have the ToList() method (And a bunch of other ones for that matter.)