.NET Array Dictionary List String 2D Async DataTable Dates DateTime Enum File For Foreach Format IEnumerable If IndexOf Lambda LINQ Parse Path Process Property Regex Replace Sort Split Static StringBuilder Substring Switch Tuple


C#:DataTable

DataRow field. The Field method on DataRow accesses a field. It is an extension method. It is found in the System.Data namespace. It is a generic method—this means it returns typed data. It makes field access easier.

DataRow

Example. First, DataTable can be enumerated with the foreach-loop. Accessing the fields themselves is somewhat more complicated. The fields can have different types. The DataTable in the example has fields with types of int, string and DateTime.

Here: The example uses the foreach-loop. In the statement list it assigns variables to the results of the Field extension method.

Tip: The Field extension method receives a type parameter. It has several parameter list overloads.

C# program that uses DataRow Field extension method

using System;
using System.Data;

class Program
{
    static void Main()
    {
	//
	// Loop over DataTable rows and call the Field extension method.
	//
	foreach (DataRow row in GetTable().Rows)
	{
	    // Get first field by column index.
	    int weight = row.Field<int>(0);

	    // Get second field by column name.
	    string name = row.Field<string>("Name");

	    // Get third field by column index.
	    string code = row.Field<string>(2);

	    // Get fourth field by column name.
	    DateTime date = row.Field<DateTime>("Date");

	    // Display the fields.
	    Console.WriteLine("{0} {1} {2} {3}", weight, name, code, date);
	}
    }

    static DataTable GetTable()
    {
	DataTable table = new DataTable(); // Create DataTable
	table.Columns.Add("Weight", typeof(int)); // Add four columns
	table.Columns.Add("Name", typeof(string));
	table.Columns.Add("Code", typeof(string));
	table.Columns.Add("Date", typeof(DateTime));
	table.Rows.Add(57, "Koko", "A", DateTime.Now); // Add five rows
	table.Rows.Add(130, "Fido", "B", DateTime.Now);
	table.Rows.Add(92, "Alex", "C", DateTime.Now);
	table.Rows.Add(25, "Charles", "D", DateTime.Now);
	table.Rows.Add(7, "Candy", "E", DateTime.Now);
	return table;
    }
}

Output

57 Koko A 7/14/2009 6:20:48 AM
130 Fido B 7/14/2009 6:20:48 AM
92 Alex C 7/14/2009 6:20:48 AM
25 Charles D 7/14/2009 6:20:48 AM
7 Candy E 7/14/2009 6:20:48 AM

The above program defines the Program class and two methods: the Main entry point, where control flow begins, and a GetTable static method. GetTable internally generates a DataTable instance with four columns and five rows.

The foreach-loop in the Main method loops over the DataTable with an iterator variable of type DataRow. The weight, name, code, and date variables are assigned to the results of the Field extension method with different parameters.

Foreach

Field method parameters. There are two parameter lists on each method invocation to Field. The first parameter to the method is enclosed in the brackets. This is called a type parameter.

Tip: A type parameter indicates what type (such as int or string) you want the method to cast the result to.

Note: The second parameter list indicates the name or location of the field by its column identifier.


Internals. The DataRowExtensions class is an extension method class located in the System.Data.DataSetExtensions.dll file. When you use the methods such as Field in this class, the metadata loader will store this additional DLL in memory.

The Field extension method, as shown, will internally invoke a generic method that validates the parameter. It then uses a generic method to unbox the object inside the DataTable.

Performance: Because no copying of the actual data will take place, the Field extension method will have adequate performance.


Summary. We looked at the Field extension method found in the System.Data namespace and the DataSetExtensions class, using the C# language. This method allows you to use elegant syntax to access the fields in a DataRow by a column identifier.

Tip: Because this method will be found in all newer .NET installations, it is easy for you to maintain usage of this Field method.