I've used LINQ to objects for ever, but have stayed away from LINQ to sql for a while, because we don't exclusive use SQL Server.
I recently began toying with the System.Data.DataSetExtensions, and realized LINQ was a much faster (easier to code anyways) way to get the value from a DataColumn out of a DataTable.
Let's say I have a table of persons names, and I want to get the last name where the person_id = 100. I used to do something like this:
var persons = new DataTable();
string lastName = string.Empty;
DataRow foundRows = persons.Select("Person_Id = 100");
if (foundRows.Length == 1)
lastName = foundRows["Last_Name"].ToString();
now with LINQ, I have created the following method:
public static T GetFirstResultValue<t,ty>(DataTable table,string colToSearch, string colToReturn, TY searchValue) where TY: IComparable
T ret = default(T);
IEnumerable<datarow> rows = from row in table.AsEnumerable()
where row.Field<ty>(colToSearch).CompareTo(searchValue) == 0
if (rows.Count() == 1)
ret = (T) rows.First()[colToReturn];
This particular method will only work if the results of the search return 1 row, but it could easily be tweaked to return the DataRow collection, or an IEnumerable list of column values for the found rows.
Hope this helps someone!
Seasoned IT Professional. Currently the IT Director for Choice Genetics, and also the world-wide manager for IT Projects related to R&D for Groupe Grimaud (our parent company).
I've spent about half my career as a contractor. I've lived all over the place, but currently reside near St. Louis, Missouri. Moved out here from Roseville, California in Feb-2005. No regrets yet.
Over the recent years I've written software for:
- Disposing of radioactive and toxic waste.
- Disposing of surplus inventory during the Decommission of McClellan Air Force Base.
- Facilitating genetic improvement for Swine Breeding.
- Managing children placed in State custody.
- Dealing with commercial trucking delivery schedules.
- Tracking high resolution images from archeological digs.
- Project Management for the roofing industry.
- Processing engines for credit card transactions.