Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C

Generic LINQ Usage To Return Single Value From DataRow

0.00/5 (No votes)
15 Jul 2010CPOL 26.7K  
This tip will allow you to return the value from column X, where column Y matches your filter
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[0]["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
                                        select row;

    if (rows.Count() == 1)
    {
        ret = (T) rows.First()[colToReturn];
    }

    return ret;
}</ty></datarow>


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!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)